2011-08-28 3 views
0

내 응용 프로그램 검색 및 시각적 오버레이. 그러나 다음 검색에서 오래된 오버레이는 분명하지 않습니다. map.getOverlays().clear();을 사용해야하지만 오버레이는 MyLocationOverlay도 제거됩니다. 동일한 오버레이 만 삭제하는 방법이 있습니까? 특정 오버레이를 제거해야 할 때지도에 오버레이를 추가지도에서 오버레이 제거

+0

문제가 해결 된 경우 답을 표시해야합니다. – hooked82

답변

1

, 당신은 당신이 같은 방식으로 제거 할 수 있습니다,

overlays.add(position, overlay_object); 

그리고 특정 위치에 추가 할 수 있습니다

overlays.remove(position); 
2

조금 늦었다는 것을 알고 있지만, 나에게 도움이되는 해결책이 떠올랐다. 미래의 프로그래머에게 도움이되도록 공유하고 싶다.

@ hooked82 : 문제가있다. 그냥

overlays.remove(position) 

그 목록입니다. 그래서 당신이 목록에서 한 항목을 제거하면 목록의이 항목 오른쪽에있는 모든 항목이 한 곳 왼쪽으로 옮겨지면서 결국 자신의 위치를 ​​엉망으로 만들어서 모든 것을 추적하는 것이 지루합니다 시각.

내 프로젝트 중 하나에서 같은 문제가 발생했습니다. 일부 업데이트가있을 때 오버레이를 추가하고 제거 했으므로 일정 시점이 지나면 오버레이 위치를 추적하기가 정말 어려웠습니다.

여기는 문제 해결을 위해 한 일이며, 지금까지 문제가 없습니다.

1 단계 : 당신이 오버레이를 처리하는 곳 MapClass에 : 사용자 정의 오버레이 클래스

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 단계를 만들 수 있습니다. 하나는 고유 UUID 각 오버레이를 식별 할 수 있으며, mapOverlays의 목록은 모든 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를 원하는 형식으로 사용자 정의 할 수 있음) 목록에서 상대 위치에 대해 걱정할 필요없이 오버레이 목록에서 해당 오버레이 항목을 제거 할 수 있습니다.

동일한 문제가있는 다른 사용자가 고유 한 오버레이를 찾는 데 도움이되기를 바랍니다.

+0

그리고 미래에 도움이된다면 답을 표시해주세요. 건배 .. !! – vivek86

1

당신은 당신이 내 경우 카운터에 을 제거 할 오래된 오버레이를 저장 current_overlay_counter이며, 1 일에 기존 오버레이 에 대한 참조를 얻을 old_overlay_item하는 카운터의 도움과 overlayItem 또 다른 참조하여이 작업을 수행 할 수있는 전화 카운터 그래서 당신은 한 가지 더 필요

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 클래스 구현

이 방법 탁에서 오버레이를 제거 할 수 없다 0 삭제하려는 오버레이의 참조

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