前一篇介绍了百度地图定位,本篇主要介绍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常用的操作了,如有不足,欢迎指导!!!!