2010-04-14 33 views
1

我想在地圖上顯示約300個點的一個PNG(繪圖)。我從Sqlite表中檢索座標,並將它們轉儲到一個遊標中。當我嘗試通過光標解析來顯示它們時,它將永遠需要繪製圖像,每個圖像大約需要0.5秒。我發現這種情況很慢,所以關於如何提高性能的一些見解會有所幫助。這裏是我的代碼,不會渲染的片段:與ItemizedOverlay結合使用的地圖疊加效果非常差

while (!mFlavorsCursor.isAfterLast()) 
      { 

       Log.d("cursor",""+(i++)); 
       point = new GeoPoint(
         (int)(mFlavorsCursor.getFloat(mFlavorsCursor.getColumnIndex(DataBaseHelper.KEY_LATITUDE))*1000000), 
         (int)(mFlavorsCursor.getFloat(mFlavorsCursor.getColumnIndex(DataBaseHelper.KEY_LONGITUDE))*1000000)); 
       overlayitem = new OverlayItem(point, "", ""); 
       itemizedoverlay.addOverlay(overlayitem); 
       itemizedoverlay.doPopulate(); 
       mFlavorsCursor.moveToNext(); 
      } 
      mapOverlays.add(itemizedoverlay); 

我試圖孤立的所有步驟,它看起來像一個緩慢是這樣的:

itemizedoverlay.doPopulate();

這是我的課程中的一個公共方法,該方法擴展了運行專用填充()方法的ItemizedOverlay。

+0

此PNG有多大? – 2010-04-14 14:52:45

+0

4k,40x40,所以我會眨眼這不應該是問題。 – oviroa 2010-04-14 15:30:31

回答

2

在填寫所有項目之前,請勿調用doPopulate()

+0

我曾嘗試過。性能保持不變,同一時間圖像出現在地圖上。 – oviroa 2010-04-14 15:53:51

+0

在填充所有項目之前,您仍然不應該調用'doPopulate()'。 – CommonsWare 2010-04-14 15:57:18

+0

好的,沒問題。但是,我如何解決性能問題? – oviroa 2010-04-14 16:35:34

1

我知道這是一個非常古老的問題,但我有一個類似的問題,並找到了解決方案。

在你ItemizedOverlay的子類,這樣做:

@Override 
public void draw(Canvas canvas, 
     MapView mapView, 
     boolean shadow) { 

    if (!shadow) 
     super.draw(canvas, mapView, shadow); 
} 

這樣做是攔截的繪製請求,並禁止陰影層的繪製。接下來的效果是,您的標記投影到地圖上時不會有漂亮的陰影,但好處是MapView上的滾動性能大幅增加。

您可以通過在標記PNG中包括陰影(使用適當的alpha)來彌補這一點。