我有一個關於Android Maps中Overlay
類的draw()
方法的問題。Overlay.draw()多次調用
當我移動地圖時,方法draw()
被調用幾次(從4到13)。這對我來說是一個問題,因爲這種方法必須重新繪製我的路線70000+點,這是很多資源。
我找不到這個問題的描述,但是當我使用任何來源的代碼示例時,我都有同樣的問題。
我有一個關於Android Maps中Overlay
類的draw()
方法的問題。Overlay.draw()多次調用
當我移動地圖時,方法draw()
被調用幾次(從4到13)。這對我來說是一個問題,因爲這種方法必須重新繪製我的路線70000+點,這是很多資源。
我找不到這個問題的描述,但是當我使用任何來源的代碼示例時,我都有同樣的問題。
這是正常行爲。當您移動地圖時,您會期望它平穩移動,並且可以實現任何地圖移動都以較小的移動步驟滑動。
爲了保持一致性,在覆蓋層上的draw()
方法被稱爲每一個這樣的小步驟移動,所以你可以重新定位你的覆蓋項目以跟隨每個os這一步。
您可以通過以下改進:
改進1
對於每個小步驟,onDraw
被調用了兩次。其中shadow
參數等於true
,另一個等於false
。如果您沒有繪製陰影,你可以忽略其中一個呼叫,因此由2減少開銷,使用以下爲onDraw()
第一行:
if(shadow) return;
改進2
優化的你正在徘徊路線的方式。如果您使用的是canvas.drawLine()
,則可以通過使用canvas.drawPath()
來明確改善它。您只需使用一次路徑(對於特定的縮放級別)創建一個路徑,並且在移動地圖時,您只需偏移路徑,而無需對其進行修改。
改進3
甚至可以進一步優化路徑,僅添加具有來自前面的像素更大的一個speciffic值(即2個像素)的距離的點,降低了路徑點的總數不任何可見的質量損失。
我正在使用上面的方法與幾千點(aprox 20.000)的路線和路徑在中等範圍設備中平穩移動。
讓我知道你是否需要上述任何一點的更多細節。
祝你好運。
謝謝!我會試試這個。 –
嗨@Luis,我也在使用OverylayView,但即使在其API參考(https://developers.google.com/maps/documentation/javascript/reference?csw=1#OverlayView)中也找不到onDraw()方法)。如果可能,請你舉個例子嗎?謝謝 – Franva
我懷疑你使用
boolean draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow, long when)
,而不是
void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)
第一個用於繪製動畫,所以它被稱爲多次。
編號:draw is being constantly called in my android map overlay
你能提供一些代碼嗎? – shkschneider
我認爲它不依賴於代碼。您可以使用Android Maps獲取任何源代碼示例,將斷點放入draw()方法並查看這種現象。我可以發送我所有的源代碼(包含佈局,清單)。我不知道如何將它附加到分支。 –
爲了清楚起見,最好將你的'新問題'傳遞給一個新的問題。而且你也會得到更多的答案:-) – Luis