2013-08-22 54 views
0

我對MapFragment繪製折線有一些疑問。在Android中繪製PolyLines的性能問題谷歌地圖API第2版

我是不是應該在TileOverlayGroundOverlay這樣的單獨圖層中繪製它們,有沒有可能? 我想盡可能地達到良好的表現。現在我有一個地圖片段,我使用Volley庫從外部服務器接收一些數據,並在AsyncTask中分別在循環中繪製每條多段線。我應該使用AsyncTask嗎? Volley請求工作異步我想,但在回調,這是調用成功的監聽器,我調用繪圖多段線這個工作在同一個線程什麼主要活動,所以我把這個到AsyncTask

我有折線的數據和方法,其中在環我每畫折線在地圖上的名單:

mMap.clear(); 
      for (PolyLineDTO polyLineDTO : currentPolyLines) { 
       polyLines.add(drawPolyline(polyLineDTO)); 
      } 

方法drawPolyline(polyLineDTO)只是調用mMap.addPolyline(polylineOptions)

當我在地圖上畫出大約500多條折線時,它明顯變慢。

您認爲如何?

+1

嘗試在單獨的問題中分解每個問題,發佈代碼的相關部分。 –

+0

謝謝。我已經分解了所有問題,並添加了更多描述。 –

回答

2

我想你可能想重新考慮你的設計選擇。

如果您添加500行以在手機等小屏幕上顯示它們,您將看不到地圖。

如果它們大部分都在屏幕之外,那麼在用戶滾動屏幕之前不要添加它們。只需計算每個PolylineLatLngBounds,並只在與getProjection().getVisibleRegion().latLngBounds相交時才添加它們。

而且在使用Volley時請勿使用AsyncTask。調用GoogleMap和其他API v2對象函數必須在UI線程上完成。

+0

因此,繪製多段線必須在UI線程中完成?我使用多段線來標記街道上的交通,所以我用它們來着色街道。一條多段線對應於街道的各個部分。如果街道是直的,它有一條折線,但如果不是,它必須有更多的折線。我使用可見區域,如果我不使用它,即使用戶只看到它們的一部分,我也將被迫顯示單個城市的成千上萬條多段線。 –

+0

參考我關於疊加層的問題。我可以一次將所有多段線添加到地圖,還是強制將它們分別添加到循環中? –