2012-08-09 37 views
0

我有一個基於谷歌MapView的應用程序與大量的矢量疊加。一次可以在屏幕上顯示多達500個複雜的多邊形。在我的手機(Android 2.3.4)上,無論是否需要,MapView的重繪都會在短時間內自動觸發。如何停止Android MapView的自動重繪?

的問題:由於大地圖的
重繪時間UI響應可能會很慢。例如,打開一個菜單可能需要一秒左右的時間。任何對話的反應也很差。

問題:
是否可以關閉MapView自動重繪?或者如何改善UI響應的其他想法?

* MapView.SetEnabled(false)不這樣做,MapView只能變成不可點擊的。 MapView.setWillNotDraw(true)給我留下了黑屏。 *據我所知在Android 2.2沒有自動重繪發生(MapView.Invalidate()是需要看到任何變化)。也許它不僅是操作系統/庫版本,還有硬件問題。

回答

1

就我對MapView的瞭解而言,僅當您拖動地圖或放大/縮小或除非您調用map.postInvalidate()時纔會重繪地圖。現在回答你的問題:

「是否可以關閉MapView的自動重繪?」是。您必須重寫MapView的onDraw()方法,因爲它是onDraw()方法,每當地圖繪製/重繪時調用,基本上,您將需要一個布爾控制變量,您可以使用它來更改是否整個應該繪製地圖(默認繪圖是通過使用super.onDraw()調用完成的),或者如果您只需要專門繪製一些覆蓋物等。

+0

您最初的疑問是足夠的:)我記錄了所有invalidate調用我的代碼,每秒鐘都有一個電話。原來是來自onSensorChanged事件。我在開發的初始階段進行了輪換地圖,但後來放棄了它。但電話仍然存在。爲什麼它沒有在舊手機上觸發幾乎沒有關係。 所以我確認:沒有自動重繪內置的MapView,除非一個行爲愚蠢:) – user1588091 2012-08-11 12:33:49

+0

優秀!我很高興獲得幫助。另外,如果您認爲這有幫助,您可以提高我的答案!乾杯 – 2012-08-11 15:19:21