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