百度地圖3.0實現圖文並茂的覆蓋物
阿新 • • 發佈:2019-02-17
前一段時間搞地圖要顯示周圍房源資訊,之前搜尋的都是使用2.x的,現在百度地圖官方新出了3.0版本由於之前思維侷限一直沒有實現圖文並茂,今天看了別人2.0的實現方式,把它用到3.0上成功顯示,下面看一下效果
現在3.0顯示覆蓋物mBaiduMap.addOverlay(OverlayOptions arg0),有兩個類可以新增MarkerOptions和TextOptions,分別對應圖片和文字,但是兩個無法合在一起,換一個思路就是我們自定義覆蓋物大多數都是自定義佈局,但是檢視官方文件沒有現成的介面,所以我們可以把佈局檔案view轉換成bitmap,然後通過BitmapDescriptorFactory.fromBitmap來獲取BitmapDescriptor,這樣就可以自定義圖文並茂的覆蓋物了,下面是如何將View轉換成Bitmap的方法:
<span style="font-size:14px;">/** * 從view 得到圖片 * @param view * @return */ public static Bitmap getBitmapFromView(View view) { view.destroyDrawingCache(); view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.setDrawingCacheEnabled(true); Bitmap bitmap = view.getDrawingCache(true); return bitmap; }</span>
我做的是雲檢索顯示內容,具體的可以檢視官方的demo,我這裡只寫出用到的主要函式的方法:
<span style="font-size:14px;">@Override public void onGetSearchResult(CloudSearchResult result, int error) { if (result != null && result.poiList != null && result.poiList.size() > 0) { mBaiduMap.clear(); LatLng ll; BitmapDescriptor bd; LatLngBounds.Builder builder = new Builder(); for (CloudPoiInfo info : result.poiList) { TextView textView = new TextView(UElivesRentsRoom.this); textView.setGravity(Gravity.CENTER); textView.setBackgroundResource(R.drawable.icon_gcoding); textView.setTextColor(getResources().getColor(android.R.color.white)); ll = new LatLng(info.latitude, info.longitude); if (info.title != null) { textView.setText(info.title); }else { textView.setText("未知"); } bd = BitmapDescriptorFactory.fromBitmap(BMapUtil.getBitmapFromView(textView)); OverlayOptions oo = new MarkerOptions().icon(bd). position(ll); mBaiduMap.addOverlay(oo); builder.include(ll); bd.recycle(); } LatLngBounds bounds = builder.build(); MapStatusUpdate u = MapStatusUpdateFactory.newLatLngBounds(bounds); mBaiduMap.animateMapStatus(u); } }</span>
我上面是使用TextView,如果要顯示其他的內容自己可以使用佈局檔案。