首页 > 代码库 > 百度地图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,如果要显示其他的内容自己可以使用布局文件。