2012-02-23 4 views
2

내 응용 프로그램에는 이미 맵에 정적 오버레이가 있고 GPS 좌표가 바뀌면 위치가 바뀌는 동적 인 오버레이가 있습니다. 그래서OSMDroid 오버레이 다중 정적 및 동적 1 개

mapView.getOverlays().clear(); 

:

내 문제는 GPS의 좌표를 변경할 때, 나는 동적 오버레이를 삭제하고 새로 만들어야합니다,하지만 난 그렇게 할 때, 그것을 사용하여, 모든 오버레이를 삭제한다는 것입니다 , 나는 그것을하는 더 좋은 방법을 찾으려고 노력하고있다.

모든 오버레이를 지운 다음 다시 맵에 배치 (메모리 사용)하거나 특정 오버레이를 지울 수 있습니까?

감사

편집 :

이 동적 마커 :

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(); 
} 
: 이것은 정적 마커를 배치 기능이

@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); 
} 

입니다

+0

마커 선언은 어떻게됩니까? –

답변

0

는 내가 가진 : 도움말 NickT에 대한

Android MapView Can't Remove Marker

감사

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

그런 다음에 그냥 하나를 제거 할 수 있습니다!

1

동적 추가하기 바로 전에 오버레이 목록의 .size() 메소드를 사용하는 경우 예 : 는이 솔루션을 사용하여 해결

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

'mapView.getOverlays(). size()'는 오버레이 수 대신 항상 1을 반환하기 때문에 작동하지 않을 수 있습니다 ... 그렇습니다. 오버레이를지도에 넣은 후에 했어요. ... – silentw

+0

그런 경우 ArrayList mItems과 같은 많은 ITEMS가있는 오버레이를 하나만 사용해야합니다. 이 목록에서 .add(), .remove (idx) 및 .size() 메소드 (예 : mItems.remove (3))를 사용할 수도 있습니다. 따라서 새로운 항목을 추가하기 전에 '동적 인'항목을 찾아 제거해야합니다. – NickT

+0

지연으로 인해 죄송합니다. 코드로 첫 번째 게시물을 업데이트했습니다. 어쩌면 당신이 나를 더 잘 도울 수 있습니다. – silentw

2

실제 문제는 mMyLocationOverlay를 추가하는 것이 mapView.getOverlays(). call()을 호출 한 횟수가 많다는 것입니다. add (mMyLocationOverlay); 사실 mMyLocationOverlay를 지우려고하면 1 개의 인스턴스 만 지워집니다. 즉, mMyLocationOverlay에 20 개의 인스턴스가있을 수 있습니다.

누군가가 미래를 위해 필요한 경우 문제의 진정한 원인을 지적하고 싶었습니다.

+0

감사합니다. 그 이후로, 나는 그 후로 계속 노력해 왔지만, 질문을 다른 사람들에게 좋은 정보로 업데이트하는 것이 좋다. 다시 한 번 감사드립니다! ;) – silentw

관련 문제