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常用的操作了,如有不足,歡迎指導!!!!

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