2012-02-23 67 views
2

在我的應用程序中,我已經在地圖上有一些靜態覆蓋圖,並且一個動態改變了它在GPS座標改變時的位置。OSMDroid覆蓋多個靜態和一個動態

我的問題是,當GPS COORDS改變,我需要清除動態覆蓋,並創建一個新的,但是當我這樣做,它會清除所有覆蓋,使用:

mapView.getOverlays().clear(); 

所以,我試圖找到更好的方式來做到這一點。

清除所有覆蓋圖,然後再將它們放在地圖上(消耗內存),或者我可以清除特定覆蓋圖嗎?

感謝

編輯:

這是動態標記:

@Override 
public void onLocationChanged(Location location) { 
    Log.d("Location", "onLocationChanged with location " + location.toString()); 

    mLatitude = (int) (location.getLatitude() * 1E6); 
    mLongitude = (int) (location.getLongitude() * 1E6); 

    GeoPoint gpt = new GeoPoint(mLatitude,mLongitude); 

    markerYou.clear(); 
    markerYou.add(new OverlayItem(getString(R.string.markerYou), getString(R.string.markerYouDescription), gpt)); 

    mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(markerYou, new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() { 
     @Override 
     public boolean onItemSingleTapUp(final int index, final OverlayItem item) { 
      Toast.makeText(ShowMap.this, getString(R.string.markerYouDescription), Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     @Override 
     public boolean onItemLongPress(final int index, final OverlayItem item) { 
      Toast.makeText(ShowMap.this, getString(R.string.markerYouDescription),Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
    }, mResourceProxy); 

    mapView.getOverlays().clear(); 
    mapView.getOverlays().add(mMyLocationOverlay); 
    mapView.invalidate(); 

    mapController.setCenter(gpt); 
} 

這是放置靜態標記功能:

public void putPlacesOfInterest(){ 
    this.dh = new DataHelper(ShowMap.this); 
    List<Pontos> list = this.dh.selectAll(); 
    for(Pontos p : list){ 
     markerPlaces.add(new OverlayItem(p.getName().toString(), p.getName().toString(), new GeoPoint(p.getLat(), p.getLng()))); 
    } 
    mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(markerPlaces, new OnItemGestureListener<OverlayItem>() { 

     @Override 
     public boolean onItemLongPress(int index, OverlayItem item) { 
      Toast.makeText(ShowMap.this, "Item " + item.mTitle, Toast.LENGTH_LONG).show(); 
      return true; 
     } 

     @Override 
     public boolean onItemSingleTapUp(int index, OverlayItem item) { 
      Toast.makeText(ShowMap.this, "Item " + item.mTitle, Toast.LENGTH_LONG).show(); 
      return true; 
     } 

    }, mResourceProxy); 

    mapView.getOverlays().add(mMyLocationOverlay); 
    mapView.invalidate(); 
} 
+0

標記的聲明是什麼樣的? – 2013-08-27 17:08:29

回答

1

如果在添加動態列表之前使用疊加列表的.size()方法,例如,

int dynamicOverlayIndex = mapView.getOverlays().size() 

然後,您可以刪除只是一個有:

mapView.getOverlays().remove(dynamicOverlayIndex); 
+0

我無法得到它的工作,因爲'mapView.getOverlays()。size()'總是返回我1,而不是覆蓋層的數量...是的,我把覆蓋層放在地圖上後做了... – silentw 2012-02-23 18:05:53

+0

在這種情況下,您必須使用一個覆蓋許多ITEMS,如ArrayList mItems。您還可以在此列表上使用方法.add(),.remove(idx)和.size()(例如mItems.remove(3))。所以,你應該能夠找到你的'動態'項目,並刪除它,然後再添加一個新的 – NickT 2012-02-23 20:08:06

+0

對不起,延遲,我更新了第一篇文章的代碼,也許這樣你可以幫助我更好:) – silentw 2012-02-27 10:46:39

2

真正的問題是,你正在添加mMyLocationOverlay有很多時間你調用mapView.getOverlays()。add(mMyLocationOverlay); 所以實際上當你嘗試清除mMyLocationOverlay時,你只能清除1個實例。意思是你可能有20個實例到mMyLocationOverlay。

只是想指出問題的真正原因,如果有人需要它的未來。

+0

感謝您指出那我從來沒有從事這方面的工作,但很高興爲其他人提供更好的信息。再次感謝! ;) – silentw 2014-05-20 12:56:00