一个典型的自定义覆盖看起来像这样。它将地图上显示的各种OverlayItem封装在列表中。
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem>{
private List<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public MyItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
public void removeOverlay(OverlayItem overlay) {
mOverlays.remove(overlay);
populate();
}
public void clear() {
mOverlays.clear();
populate();
}
@Override
public int size() {
return mOverlays.size();
}
}
方法可以暴露添加/删除个别覆盖图,但也可以删除所有覆盖图(清除方法)。
删除单个overlayitem
MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0);
sitesOverlay.removeOverlay(overlay);
添加一个overlayItem
MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0);
sitesOverlay.addOverlay(new OverlayItem(p, "title", "snippet"));
删除所有overlayItems
MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0);
sitesOverlay.clear();
当触摸地图(被移除物品的位置)时,我遇到`ArrayIndexOutOfBoundsException`,甚至调用`clear()`和`populate()`。 解决方法是在`populate`之前调用`setLastFocusedIndex(-1)`,请在[本文]中找到详细信息(http://bit.ly/ID45TU) – xinthink 2012-04-12 08:17:18