Java Android GoogleMap MapView 大量加載OVERLAY,速度很慢解決方式

  • 2010
  • 0

摘要:Android map 大量加載OVERLAY

原文來自stackoverflow Dave的回答:

http://stackoverflow.com/questions/2659770/android-map-performance-poor-because-of-many-overlays

I've done the following now and it works fast(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

and in MyOverlay:

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

public void populateNow(){
    populate();
}

大部分populate()是寫在addOverlay的後面,就是這個動作造成大量加載圖標的時候很慢

在還沒把populate()分離前,我測試加載500個圖標,所需時間大概是12秒

現在用了Dave大的方法後,加載2000個圖標,只需要1~2秒

 

另外還有兩個地方可以些許改善系統的負擔

1.盡量把加載的圖片用小一點

可透過  http://tinypng.org/   這類型的方式壓縮圖片的大小

2.關掉overlay的陰影效果

在自定義的overlay類中覆寫

@Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        try {
            if(!shadow) {
                super.draw(canvas, mapView, false);
            }
        } catch (Exception e) {
            Log.e(this.toString(),e.toString());
        }
    }

以上若有錯誤或是其他的方法

都請給小弟個指教,一同進步,謝謝