2010-04-17 5 views
5

많은 마커 (~ 20-50)를 보여주는 내 안드로이드 응용 프로그램의지도가 있습니다. 하지만 앱이 스크롤/확대/축소를 시도 할 때 매우 열악합니다 (Google Android지도에서 피자 샘플 검색을했는데 20-50 개의 결과가 발견되어 확대/축소 할 때 특정 성능 문제가 발생하지 않았습니다. 지도).안드로이드 맵 많은 오버레이 때문에 성능이 좋지 않습니까?

가 MyItemizedOverlay.addOverlay은 다음과 같습니다

onCreate() { 
    .... 
    drawable = this.getResources().getDrawable(R.drawable.marker1); 
    itemizedOverlay = new MyItemizedOverlay(drawable,mapView); 
    ... 
    callWebServiceToRetrieveData(); 

    createMarkers(); 
} 

createMarkers(){ 
    for(elem:bigList){ 
     GeoPoint geoPoint = new GeoPoint((int)(elem.getLat()*1000000), (int) (elem.getLon()*1000000)); 
     OverlayItem overlayItem = new OverlayItem(geoPoint, elem.getName(), elem.getData()); 
     itemizedOverlay.addOverlay(overlayItem); 

     mapOverlays.add(itemizedOverlay); 
} 
mapView.invalidate(); 

} : 다음

내 (의사) 코드 나는이 올바르게 작동하는지 이해하는 경우

public void addOverlay(OverlayItem overlay) { 
    m_overlays.add(overlay); 
    populate(); 
} 

답변

8

, 당신은 안 오버레이를 추가 할 때마다 채우기를 호출해야합니다. 일단 모두 추가했다면해야합니다. 내가 뭘 일어나는 것은 첫 번째 OverlayItem를 추가하고 그래서이 ItemizedOverlay.에 다음 목록에 두 번째 OverlayItem를 추가하고 populate()를 부르는 추가 populate()을 부르는 생각하며 항목의 결과로 ItemizedOverlay에 그 오버레이를 추가 오버레이에서. 그래서 저는 20-50 세 이상으로 성장하고 있다고 생각합니다.

+0

뿐만 아니라에서

speedyPopulate() { populate(); } 

라고,하지만 당신은 오버레이에 하나 개 이상의 마커를 가질 수 있습니다. 의사 코드가 쓰여지는 방식으로 마커 당 동일한 오버레이를 한 번 추가합니다. - mapOverlays.add (itemizedOverlay); - 정확하게 도움이되지 않습니다. – CommonsWare

+1

어떻게하면 좋을까요? – Dave

+0

내게도 흥미로울 것입니다. –

6

나는 이제 다음과 같은 짓을했는지 그것은 빠른 (어) 작동 :

createMarkers(){ 
    for(elem:bigList){ 
     GeoPoint geoPoint = new GeoPoint((int)(elem.getLat()*1000000), (int) (elem.getLon()*1000000)); 
     OverlayItem overlayItem = new OverlayItem(geoPoint, elem.getName(), elem.getData()); 
     itemizedOverlay.addOverlay(overlayItem); 

    } 
    itemizedOverlay.populateNow(); 
    mapOverlays.add(itemizedOverlay); //outside of for loop 

}

및 MyOverlay에

:

public void addOverlay(OverlayItem overlay) { 
    m_overlays.add(overlay); 
} 

public void populateNow(){ 
    populate(); 
} 

이 지금/더 정확한지를? 또는 다른 개선이 가능합니까?

+0

훨씬 더 많이 이쪽. 정말 감사합니다! :-) –

0

나는 지난 밤에 같은 문제에 부딪 쳤고 나의 해결책은 당신과 같았습니다. 어떻게 populate 메소드를 호출했는지 나는 이상하게 보였다.

난 당신과 같은 코드를했지만, 나는 MyOverlay 클래스

관련 문제