2011-08-28 106 views
0

我的應用程序搜索和可視化相同的覆蓋圖。但是,在接下來的搜索中,舊的疊加並不清楚。我必須嘗試使用​​map.getOverlays().clear();,但它也會刪除MyLocationOverlay的疊加層。有一種只刪除相同覆蓋的方法?刪除地圖中的覆蓋圖

+0

記得標記答案,如果它解決了您的問題。 – hooked82

回答

1

當您添加疊加到地圖中,您可以將其添加到某個位置

overlays.add(position, overlay_object); 

然後,當你需要刪除特定的疊加,就可以以同樣的方式將其刪除

overlays.remove(position); 
2

我知道它有點太晚了,但因爲我想出了一個解決方案,幫助我,我想分享它,以便它可以幫助程序員在未來..

@ hooked82:問題與做ing只是

overlays.remove(position) 

是它的一個列表。所以當你從列表中刪除一個項目時,列表中這個項目右邊的每個項目都會向左移動一個位置,這最終會弄亂你的位置,這使得全部跟蹤它們變得非常繁瑣時間。

在我的一個項目中,我面臨同樣的問題。由於我在某些更新中添加和刪除疊加層,經過一段時間後,很難跟蹤列表中的疊加層位置。

這是我爲解決問題所做的工作,迄今爲止沒有任何問題。

第1步:創建自定義覆蓋類

public class MyOverlay extends Overlay 
{ 
    private String overlayUUID; 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    { 
      -- do what you need to do here -- 
    } 

    public String getOverlayUUID() 
    { 
      return overlayUUID 
    } 
} 

第2步:在MapClass,你處理覆蓋。請確保mapOverlays列表是MapView類的全局列表,您添加所有mapOverlays

 List<Overlay> mapOverlays = mapView.getOverlays(); 

    public void removeChosenOverlay(String overlayUUID) 
    { 
     for(int i=0; i<mapOverlays.size(); i++) 
     { 
      String className = mapOverlays.get(i).getClass().getSimpleName(); 

      if(className.equals("MyOverlay")) 
      { 
       MyOverlay myOverlay = (MyOverlay) mapOverlays.get(i); 

       if((myOverlay != null) && (myOverlay.getOverlayUUID.equals(overlayUUID))) 
       { 
        mapOverlays.remove(i); 
        mapView.invalidate() 
        break; 
       } 
      } 
     } 
    } 

通過上述方法,可以唯一地標識一個UUID每個覆蓋(在我的情況下,它是一個字符串,但是您可以以您希望的任何格式自定義創建UUID),並且可以從覆蓋列表中成功刪除相應的覆蓋項目,而不必擔心它們在列表中的相對位置。

我希望它可以幫助別人面對同樣的問題,唯一識別疊加層。

+0

並請標記答案,如果它有助於任何人在未來..乾杯..! – vivek86

1

你可以用計數器的幫助和另一參考overlayItem這樣做是爲了節省您要在我的情況下反刪除 舊覆蓋是current_overlay_counter和old_overlay_item第一獲得舊覆蓋 參考調用計數器爲0,因此沒有覆蓋刪除

public void getcurrentPostion() 
    { 
    GeoPoint gpoint=new GeoPoint((int)((current_location.getLatitude())*1E6),((int)((current_location.getLongitude())*1E6))); 
     OverlayItem overlayitem = new OverlayItem(gpoint, "Hola, Mundo!", "I'm in Mexico City!");  
     mapOverlays = map.getOverlays(); 
     itemizedoverlay.addOverlay(overlayitem); 
     mapOverlays.add(itemizedoverlay); 
     if(current_overlay_counter>0) 
     { 
      System.out.println("deleting overlay"); 
      itemizedoverlay.removeOverlay(old_overlay_item); 
      map.invalidate(); 
     } 

     old_overlay_item=overlayitem; 
     current_overlay_counter++; 
     map_controller.setCenter(gpoint); 
    } 

你需要一兩件事,一個方法來去除覆蓋在你的ItemizedOverlay類實現

此法德es您想要刪除的覆蓋物的引用

public void removeOverlay(OverlayItem overlay){ 
      mOverlays.remove(overlay); 
      System.out.println("removeOverlay is called"); 
      populate(); 
     }