2012-10-17 86 views
2

我有一個關於Android Maps中Overlay類的draw()方法的問題。Overlay.draw()多次調用

當我移動地圖時,方法draw()被調用幾次(從4到13)。這對我來說是一個問題,因爲這種方法必須重新繪製我的路線70000+點,這是很多資源。

我找不到這個問題的描述,但是當我使用任何來源的代碼示例時,我都有同樣的問題。

+0

你能提供一些代碼嗎? – shkschneider

+0

我認爲它不依賴於代碼。您可以使用Android Maps獲取任何源代碼示例,將斷點放入draw()方法並查看這種現象。我可以發送我所有的源代碼(包含佈局,清單)。我不知道如何將它附加到分支。 –

+0

爲了清楚起見,最好將你的'新問題'傳遞給一個新的問題。而且你也會得到更多的答案:-) – Luis

回答

6

這是正常行爲。當您移動地圖時,您會期望它平穩移動,並且可以實現任何地圖移動都以較小的移動步驟滑動。

爲了保持一致性,在覆蓋層上的draw()方法被稱爲每一個這樣的小步驟移動,所以你可以重新定位你的覆蓋項目以跟隨每個os這一步。

您可以通過以下改進:

改進1

對於每個小步驟,onDraw被調用了兩次。其中shadow參數等於true,另一個等於false。如果您沒有繪製陰影,你可以忽略其中一個呼叫,因此由2減少開銷,使用以下爲onDraw()第一行:

if(shadow) return; 

改進2

優化的你正在徘徊路線的方式。如果您使用的是canvas.drawLine(),則可以通過使用canvas.drawPath()來明確改善它。您只需使用一次路徑(對於特定的縮放級別)創建一個路徑,並且在移動地圖時,您只需偏移路徑,而無需對其進行修改。

改進3

甚至可以進一步優化路徑,僅添加具有來自前面的像素更大的一個speciffic值(即2個像素)的距離的點,降低了路徑點的總數不任何可見的質量損失。

我正在使用上面的方法與幾千點(aprox 20.000)的路線和路徑在中等範圍設備中平穩移動。

讓我知道你是否需要上述任何一點的更多細節。

祝你好運。

+0

謝謝!我會試試這個。 –

+0

嗨@Luis,我也在使用OverylayView,但即使在其API參考(https://developers.google.com/maps/documentation/javascript/reference?csw=1#OverlayView)中也找不到onDraw()方法)。如果可能,請你舉個例子嗎?謝謝 – Franva