1. 程式人生 > >百度地圖3.0實現圖文並茂的覆蓋物

百度地圖3.0實現圖文並茂的覆蓋物

前一段時間搞地圖要顯示周圍房源資訊,之前搜尋的都是使用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,如果要顯示其他的內容自己可以使用佈局檔案。