在android百度地图上添加自定义覆盖物

来源:互联网 发布:手机小说阅读软件 编辑:程序博客网 时间:2024/05/16 02:04

        在项目中遇到一个问题,需要在百度地图上添加一个自定义的覆盖物,看了一下官方的文档没有找到能够满足要求的(也许是我没有发现)。我想肯定有其它的方法,这里我给一种我自己的解决方法。

        思路:官方提供的覆盖物类(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