2011-08-28 111 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(); 
     }