百度地图开发( 基于新版本V2_1_1)— 覆盖物(4)_自定义图层:ItemizedOverlay

从2.0.0版本开始,SDK不支持直接继承Overlay , 用户可通过继承ItemizedOverlay来添加覆盖物。

添加覆盖物的一般流程如下:

1. 创建OverlayItem,准备overlay数据;

2. 创建ItemizedOverlay实例,调用 addItem(OverlayItem)} 接口添加overlay。

3. 调用MapView.getOverlays().add()方法添加overlay到mapview中。

4. 调用MapView.refresh() 使Overlay生效

下面我们就一起来挨个步骤来实现。

首先,先创建OverlayTest,继承ItemizedOverlay。相关事件在该方法中处理。核心代码如下:

	class OverlayTest extends ItemizedOverlay<OverlayItem>{

		public OverlayTest(Drawable marker, MapView mapView) {
			
			super(marker, mapView);
		}
		
		/**
		 * 再次处理Mapview的点击事件,当返回true
		 */
		public boolean onTap(GeoPoint arg0, MapView arg1) {
			
			super.onTap(arg0, arg1);
			
			return false;
		}
		
		/**
		 * 在此处理item点击事件
		 */
		protected boolean onTap(int index) {
			
	        System.out.println("item onTap: "+index);
	        
	        return true;
		}
	}

接下来,就是开始自定义图层的实现了。

1、创建OverlayItem,准备overlay数据,此处添加三个自定义图层。具体核心代码如下:

		// 1 创建OverlayItem,准备overlay数据;
		//准备要添加的Overlay
		double mLat1 = 39.90923;
		double mLon1 = 116.397428;
		double mLat2 = 39.9022;
		double mLon2 = 116.3922;
		double mLat3 = 39.917723;
		double mLon3 = 116.3722;
		
		// 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)
		GeoPoint p1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6));
		GeoPoint p2 = new GeoPoint((int) (mLat2 * 1E6), (int) (mLon2 * 1E6));
		GeoPoint p3 = new GeoPoint((int) (mLat3 * 1E6), (int) (mLon3 * 1E6));
		
		//准备overlay图像数据,根据实情情况修复
		Drawable mark= getResources().getDrawable(R.drawable.ic_launcher);
		
		//用OverlayItem准备Overlay数据
		OverlayItem item1 = new OverlayItem(p1,"item1","item1");
		
		//使用setMarker()方法设置overlay图片,如果不设置则使用构建ItemizedOverlay时的默认设置
		OverlayItem item2 = new OverlayItem(p2,"item2","item2");
		item2.setMarker(mark);
		OverlayItem item3 = new OverlayItem(p3,"item3","item3");
2、 创建ItemizedOverlay实例,调用 addItem(OverlayItem)} 接口添加overlay。代码如下:

		// 2. 创建ItemizedOverlay实例,调用 addItem(OverlayItem)} 接口添加overlay。
		//创建IteminizedOverlay
		OverlayTest itemOverlay = new OverlayTest(mark, mapView); // 此处方法为自己创建的类,继承自ItemizedOverlay<OverlayItem>
		
		//将IteminizedOverlay添加到MapView中 	
		//注意:目前IteminizedOverlay不支持多实例,MapView中只能有一个IteminizedOverlay实例
3、 调用MapView.getOverlays().add()方法添加overlay到mapview中。

		// 3. 调用MapView.getOverlays().add()方法添加overlay到mapview中。
		mapView.getOverlays().clear();
		mapView.getOverlays().add(itemOverlay);
		 
		//现在所有准备工作已准备好,使用以下方法管理overlay.
		//添加overlay, 当批量添加Overlay时使用addItem(List<OverlayItem>)效率更高
		itemOverlay.addItem(item1);
		itemOverlay.addItem(item2);
		itemOverlay.addItem(item3);
4. 调用MapView.refresh() 使Overlay生效
	//4. 调用MapView.refresh() 使Overlay生效
		mapView.refresh();
运行后的效果如下图:

百度地图开发( 基于新版本V2_1_1)— 覆盖物(4)_自定义图层:ItemizedOverlay_第1张图片

你可能感兴趣的:(java,android,百度地图,覆盖物,overlay)