在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值