您的位置:首页 > 其它

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

2013-05-27 10:05 281 查看
从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();
运行后的效果如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: