本文主要是介绍在android百度地图上添加自定义覆盖物,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在项目中遇到一个问题,需要在百度地图上添加一个自定义的覆盖物,看了一下官方的文档没有找到能够满足要求的(也许是我没有发现)。我想肯定有其它的方法,这里我给一种我自己的解决方法。
思路:官方提供的覆盖物类(ItemizedOverlay<OverlayItem>)可以继承,然后自定义,但是它接受的是一个Drawable对象。于是我采用的是将自定义的一个view转换为一个Drawable的方式来实现。
效果如图所示:
首先加载自定义的一个view,然后将view中控件的值填上。创建一个空的bitmap对象,使用view的draw方法,将view绘制在bitmap中。关键代码:
LayoutInflater mInflater = LayoutInflater.from(context);View view = mInflater.inflate(R.layout.layer, null);//获取背景图片的宽和高Drawable d = context.getResources().getDrawable(R.drawable.search_annotation_red);Bitmap b = Bitmap.createBitmap(d.getMinimumWidth(), d.getMinimumHeight(), Bitmap.Config.RGB_565);//设置名字view.draw(new Canvas(b));
private static Bitmap getViewBitmap(View view) {view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap;}
百度地图的覆盖物类:
/**覆盖物*/class OverlayTest extends ItemizedOverlay<OverlayItem> {private Context mContext = null;public OverlayTest(Drawable marker,Context context, MapView mapView){super(marker,mapView);this.mContext = context;}protected boolean onTap(int index) {/*** TODO* 这里响应点击事件,启动activity或者其它处理*/Toast.makeText(MainActivity.this, "点击目标", Toast.LENGTH_SHORT).show();return true;}public boolean onTap(GeoPoint pt, MapView mapView){super.onTap(pt,mapView);return false;}}
本demo下载地址:http://download.csdn.net/detail/u011421480/5856255
这篇关于在android百度地图上添加自定义覆盖物的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!