android百度地图使用(三)

前一篇介绍了百度地图定位,本篇主要介绍mark点的添加和使用。很多时候,百度地图使用出现的bug大都是因为我们还没理解就去使用,现在的开发,很多人拿过来不加分析直接导入项目,幸运的一次两次调试成功了,不幸运的调试多次还是bug一堆,本篇博客将会详细分析每一个环节,要是有不对的地方,欢迎指出。

这里写图片描述

在添加overlay的时候需要一个OverlayOptions参数。这是个抽象类,是地图选型基类,也就是说想要添加marker,我们只需要传入
MarkerOptions就可以了。通过MarkerOptions设置marker点的位置,图像等。这样在BaiduMap调用addOverlay()时就返回当前我们添加的marker。添加一个Marker代码如下:

 OverlayOptions ooA = null;
                ooA = new MarkerOptions().position(latLng).icon(bd_route)                     .zIndex(9).draggable(false)extraInfo(new Bundle()).title("marker");
      Marker marker=(Marker)mBaiduMap.addOverlay(ooA);

这样就在地图上添加了一个marker,是不是觉得很简单?marker添加之后为marker设置点击事件来做之后的逻辑处理。这时候要用到 mBaiduMap.setOnMarkerClickListener(this);这个监听,我们让activity继承 BaiduMap.OnMarkerClickListener,这个时候只要在

 @Override
    public boolean onMarkerClick(Marker marker) {
        //bundle可以存储对象,这里可以拿到marker携带的扩展信息
        Bundle extraInfo = marker.getExtraInfo();
        //title也可以存储信息,也可以对点击的marker做区分
        String title = marker.getTitle();
        return false;
    }

通过在添加marker的时候设置title和extraInfo来对marker加以区分和添加信息,这样在点击marker的时候就可以取出bundle中的信息来进行自己的逻辑操作了。marker的移除操作也很简单,只需调用其remove方法或者调用的clear方法就可以了,前者是单独移除marker点,后者是移除地图上的多有overlay。

最后:在项目中会遇到这样的需求,就是marker点显示用户头像问题。

这里写图片描述

显然这个marker点不是一张图片就可以做出来的,这个需要几种图片的组合才可以,那如何实现这种需求呢?我们利用这个类BitmapDescriptorFactory这个类是bitmap的处理类,调用之前必须初始化SDK才可以,

这里写图片描述

看这个方法,我们可以在xml中写一个布局文件,然后将xml转化为view,这样就可以实现啦!但是这里面有个坑,那就是在掉fromView()的时候要设置LayoutParams.因为部分手机会提示onlayout异常原因是百度的源码中调了layout()方法。

    public static BitmapDescriptor fromView(View var0) {
        if(var0 == null) {
            return null;
        } else {
            var0.measure(MeasureSpec.makeMeasureSpec(0, 0), MeasureSpec.makeMeasureSpec(0, 0));
            var0.layout(0, 0, var0.getMeasuredWidth(), var0.getMeasuredHeight());
            var0.buildDrawingCache();
            Bitmap var1 = var0.getDrawingCache();
            BitmapDescriptor var2 = fromBitmap(var1);
            if(var1 != null) {
                var1.recycle();
            }

            var0.destroyDrawingCache();
            return var2;
        }
    }

解决方式如下,在xml转化为view之后设置layoutParams

 mapIconView.setLayoutParams(new ViewGroup.LayoutParams(
                        ViewGroup.LayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT));

以上就是百度地图添加marker常用的操作了,如有不足,欢迎指导!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章