百度地圖新增自定義Marker+顯示覆蓋層次優先順序
實際專案中經常會整合地圖,今天就只談談百度地圖新增自定義Marker這一部分,希望對百度地圖整合有這部分需求的小夥伴能有一些幫助。
百度地圖文件裡面對marker的新增只是很簡短的說了常用的新增圖示,但是如果專案中的需求有時候往往需要佈局比較複雜的覆蓋物
如果專案需求是點選Marker的時候才彈出某個佈局,那麼可以為Marker新增點選事件setOnMarkerClickListener來做彈出InfoWindow操作
當然有時候需求是每個覆蓋物載入的時候就需要比較複雜的佈局時,這種方法顯然是不行的,這時候就需要我們通過自定義Marker來實現,百度地圖只是講解了如何新增簡單圖示的Marker,方法如下:
1.首先自己先寫好一個自己想要達到效果的佈局檔案,這裡就不再貼程式碼了。以圖1效果為例,若上方的button改為TextView,其實不改也可以。
2.定義一個獲取icon的方法,設定返回資料型別為BitmapDescriptor,例:
public BitmapDescriptor getBitmapDescriptor() {
BitmapDescriptor bttmap = null;
View item_view = LayoutInflater.from(activity).inflate(R.layout.frag_near_marker,null);
TextView tv_storeName = (TextView) item_view.findViewById(R.id.frag_near_marker_tv_name);
ImageView imageView = (ImageView) item_view.findViewById(R.id.frag_near_marker_iv_logo);
// 設定佈局中文字
tv_storeName.setText("");
// 設定圖示
imageView.setImageResource(R.mipmap.home_icon_department);
bttmap = BitmapDescriptorFactory.fromView(item_view);
return bttmap;
}
這裡面呼叫的是百度地圖BitmapDescriptorFactory.fromView的方法載入一個佈局,而不再只是BitmapDescriptorFactory.fromResource載入圖片等資原始檔。
3.在MarkerOptions設定icon的時候傳入getBitmapDescriptor方法返回的資料即可。
這樣一來就可以實現每個Marker加載出來都能像圖1一樣的效果,而且點選事件是整個載入的佈局都有效。
其次來談一談顯示的優先順序問題,即想要讓哪個覆蓋物顯示在上層,哪些覆蓋物在縮小地圖視角的時候可以被其他覆蓋物覆蓋。
這裡給大家談一下兩個方法,如果只是想讓某個覆蓋物在縮小地圖視角的時候在追上層顯示,那麼可以考慮為Marker設定setTop()屬性來實現,引數傳入true或者false,如果是想為每一個Marker都編排顯示層次的優先順序,那麼可以考慮在設定MarkerOptions的時候呼叫zIndex()方法,引數傳入一個int型別的值,那麼Marker會根據這個值的大小來排列顯示層次的優先順序,值越大,就會顯示在越上層。
本部落格僅供參考,如有錯誤,歡迎指出。非常感謝!
附上百度地圖文件連結 百度地圖