2010-04-17 61 views
5

我在我的android應用程序中有一個顯示許多標記(〜20-50)的地圖。但是,當我嘗試滾動/縮放時,該應用的性能非常差(在Google Android Maps中,我做了一個比薩餅示例搜索,並且發現了20-50個結果,並且在縮放/滾動時沒有注意到任何特定的性能問題地圖)。Android地圖性能很差,因爲有很多覆蓋?

這裏是我的(僞)代碼:

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(); 

}

的MyItemizedOverlay.addOverlay看起來是這樣的:

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

回答

8

如果我理解它是如何工作正常,你不應該在每次添加疊加後調用填充。一旦你全部加入,你應該做。我認爲發生的事情是,你添加的第一個OverlayItem並調用populate()所以它補充說,到ItemizedOverlay.然後添加第二個OverlayItem到列表和電話populate(),並將其添加這些覆蓋到ItemizedOverlay導致項目在覆蓋。所以我認爲你的想法超過了20-50。

+0

不僅如此叫

speedyPopulate() { populate(); } 

,但你可以在覆蓋多個標記。你的僞代碼被寫入的方式,你添加*相同的覆蓋*每個標記一次 - 'mapOverlays.add(itemizedOverlay);' - 這不會幫助你。 – CommonsWare 2010-04-17 20:37:27

+1

我該如何讓這更好? – Dave 2010-04-17 21:07:52

+0

我也會很感興趣。 – 2012-12-05 16:21:35

6

我已經做了,現在下面,它工作快速(ER):

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

很多,這種方式好多了。非常感謝你! :-) – 2012-12-05 16:21:15

0

昨晚我遇到了同樣的問題,我的解決方案和你的一樣。我對我如何稱爲填充方法感到很奇怪。

我有同樣的代碼,你,但我在MyOverlay類