2012-03-27 68 views
0

我正在閱讀SurfaceView以及如何使用它,並且我遇到了一些信息,指出SurfaceViewView#willNotDraw()默認設置爲false,並且您可以致電SurfaceView#onDraw()。我還讀到RomainGuy說這是默認完成的,因爲它更高效。我現在的問題是,你什麼時候應該在一個單獨的線程中處理呼叫SurfaceView#onDraw(),以及什麼時候應該設置View#willNotDraw()true,並且只需撥打SurfaceView#invalidate()。兩者之間是否有區別,並且一個人的表現是否比另一個有所提高?什麼時候應該讓SurfaceView通過UI線程繪製?

回答

1

參見:

http://developer.android.com/reference/android/view/View.html#setWillNotDraw(boolean)

我不知道你得到了你的信息,但至少javadoc的說,大多數用戶將它設置爲false獲得的Android將其發送onDraw事件本身。關於你什麼時候應該這樣做的問題,我想說明一下你爲什麼使用SurfaceView

如果您的視圖顯示一些動態的(例如遊戲或東西,有一個嚴密的事件循環),你要精確地控制更新時發生,特別是如果你將不得不使用的一個方面的信息更詳細的形式invalidate保存重繪整個View。您不希望Android爲您撥打invalidate,這就是爲什麼國旗在那裏。

如果,另一方面,你只是畫一些靜態的,這是有道理的,讓Android的UI堆棧控制廢票。

順便說一句,invalidate只發布到重新繪製View的請求,所以如果你打算使用事件循環式的意識到這一點(onDraw將某個你怎麼稱呼它叫)。

編輯:一些澄清。

1

使用SurfaceView.onDraw()和SurfaceView.invalidate()將使SurfaceView像一個普通視圖,你將支付與SurfaceView相關的額外開銷。如果你想從UI線程繪製,使用常規的視圖來代替。它更容易,更便宜。

相關問題