马会东的博客

马会东的博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
 

百度地图3.0实现图文并茂的覆盖物

分类: 地图API开发 android

前一段时间搞地图要显示周围房源信息,之前搜索的都是使用2.x的,现在百度地图官方新出了3.0版本由于之前思维局限一直没有实现图文并茂,今天看了别人2.0的实现方式,把它用到3.0上成功显示,下面看一下效果

 

现在3.0显示覆盖物mBaiduMap.addOverlay(OverlayOptions arg0),有两个类可以添加MarkerOptions和TextOptions,分别对应图片和文字,但是两个无法合在一起,换一个思路就是我们自定义覆盖物大多数都是自定义布局,但是查看官方文档没有现成的接口,所以我们可以把布局文件view转换成bitmap,然后通过BitmapDescriptorFactory.fromBitmap来获取BitmapDescriptor,这样就可以自定义图文并茂的覆盖物了,下面是如何将View转换成Bitmap的方法:

 

  1. <span style="font-size:14px;">/** 
  2.      * 从view 得到图片 
  3.      * @param view 
  4.      * @return 
  5.      */  
  6.     public static Bitmap getBitmapFromView(View view) {  
  7.         view.destroyDrawingCache();  
  8.         view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),  
  9.                 View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));  
  10.         view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());  
  11.         view.setDrawingCacheEnabled(true);  
  12.         Bitmap bitmap = view.getDrawingCache(true);  
  13.         return bitmap;  
  14.     }</span>  

我做的是云检索显示内容,具体的可以查看官方的demo,我这里只写出用到的主要函数的方法:

 

 

  1. <span style="font-size:14px;">@Override  
  2.     public void onGetSearchResult(CloudSearchResult result, int error) {  
  3.         if (result != null && result.poiList != null  
  4.                 && result.poiList.size() > 0) {  
  5.             mBaiduMap.clear();  
  6.             LatLng ll;  
  7.             BitmapDescriptor bd;  
  8.             LatLngBounds.Builder builder = new Builder();  
  9.             for (CloudPoiInfo info : result.poiList) {  
  10.                 TextView textView = new TextView(UElivesRentsRoom.this);  
  11.                 textView.setGravity(Gravity.CENTER);  
  12.                 textView.setBackgroundResource(R.drawable.icon_gcoding);  
  13.                 textView.setTextColor(getResources().getColor(android.R.color.white));  
  14.                 ll = new LatLng(info.latitude, info.longitude);  
  15.                 if (info.title != null) {  
  16.                     textView.setText(info.title);  
  17.                 }else {  
  18.                     textView.setText("未知");  
  19.                 }  
  20.                 bd = BitmapDescriptorFactory.fromBitmap(BMapUtil.getBitmapFromView(textView));  
  21.                 OverlayOptions oo = new MarkerOptions().icon(bd).  
  22.                         position(ll);  
  23.                 mBaiduMap.addOverlay(oo);  
  24.                   
  25.                 builder.include(ll);  
  26.                 bd.recycle();  
  27.             }  
  28.             LatLngBounds bounds = builder.build();  
  29.             MapStatusUpdate u = MapStatusUpdateFactory.newLatLngBounds(bounds);  
  30.             mBaiduMap.animateMapStatus(u);  
  31.         }  
  32.     }</span>  

我上面是使用TextView,如果要显示其他的内容自己可以使用布局文件。

 

 
0
posted on 2015-05-20 00:41  马会东  阅读(397)  评论(0编辑  收藏  举报