如何从MapView中删除特定的ItemizedOverlay?

时间:2012-06-27 05:11:39

标签: android android-mapview itemizedoverlay

我的应用程序中有2个ItemizedOverlay个实例,一个用于CurrentLocation,另一个用于其他内容。我已将这两个叠加层添加到MapView

我希望在提示地图的刷新按钮时更新CurrentLocation叠加层。如果我这样做,则意味着它也会显示上一个当前位置,也会显示新位置。如何删除上一个?

但我还需要展示另一个叠加层。

我已将ItemizedOverlay

分组
MyItemizedOverlay currentOverlay = new MyItemizedOverlay(pushPinDrawable);
MyItemizedOverlay anotherOverlay = new MyItemizedOverlay(drawable);

刷新按钮的代码:

if (currentGeo != null) {
    mapView.getOverlays().remove(currentOverlay);
    mapVite();
    mapOverlays = mapView.getOverlays();
    myLocationOverlay = new OverlayItem(currentGeo, "My Location", mapTime.format(new Date(myLocationTime)));   
                                    // (currentGeo is the updated current geo point.)
    currentOverlay.addOverlay(myLocationOverlay);
    mapOverlays.add(currentOverlay);
    mapController.animateTo(currentGeo);
} else {
    Toast.makeText(this, "Your Current Location is temporarily unavailable", Toast.LENGTH_LONG).show();
}

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你应该有这样的

public void onLocationChanged(Location location) {
        if (mMyOverlay == null) {
            mMyOverlay = new myOverlay(getResources().getDrawable(R.drawable.arrow), MyMap);
            MyMap.getOverlays().add(mMyOverlay);
        } else {
            MyMap.getOverlays().remove(mMyOverlay);
            MyMap.invalidate();
            mMyOverlay = new myOverlay(getResources().getDrawable(R.drawable.arrow), MyMap);
            MyMap.getOverlays().add(mMyOverlay);
        }
        if (location != null) {
            MyMap.invalidate();
            GeoPoint MyPos = new GeoPoint(microdegrees(location.getLatitude()), microdegrees(location.getLongitude()));
            MyController.animateTo(MyPos);
            mMyOverlay.addPoint(MyPos, "My position", "My position");
        }

答案 1 :(得分:1)

在地图叠加层数组中添加CurrentOverlay之前,您肯定可以做到这样的事情,

if(mapOverlays.contains(itemizedOverlay))
{
   mapOverlays.remove(itemizedOverlay);
}
mapOverlays.add(itemizedOverlay);