Android中的postInvalidate()
函數有什麼用?我在很多地方都看到了這個功能。當我用Google搜索,我想出了這麼多:postInvalidate()是做什麼的?
postInvalidate-- 後的UI線程上的無效請求
我不知道是什麼短語「無效請求」有手段。有人能詳細解釋這裏發生了什麼嗎?
Android中的postInvalidate()
函數有什麼用?我在很多地方都看到了這個功能。當我用Google搜索,我想出了這麼多:postInvalidate()是做什麼的?
postInvalidate-- 後的UI線程上的無效請求
我不知道是什麼短語「無效請求」有手段。有人能詳細解釋這裏發生了什麼嗎?
從View類派生的每個類都有invalidate和postInvalidate方法。如果調用invalidate,它會告訴系統當前視圖已更改,並且應該儘快重新繪製。由於只能從UIThread調用此方法,因此當您不在UIThread中時仍需要另一種方法,並且仍想通知系統您的View已更改。 postInvalidate方法從非UIThread中通知系統,視圖將盡快在UIThread的下一個事件回調中重新繪製。 SDK文檔中也是briefly explained。
只是比較無效和post驗證。
通過這種方法(postInvalidate()
),您可以使非UI線程的View
無效。從UI線程使用invalidate()
方法使View
無效。
無效意味着我們將在未來的某個時間點(不是立即)調用View.onDraw(Canvas)
方法重新繪製整個View
(如果View
可見)。
Android正在自動重新繪製View
s,但有時需要告訴:「嘿,這View
已被更改,儘快重繪它。」
更多在:
http://developer.android.com/guide/topics/ui/how-android-draws.html
http://developer.android.com/reference/android/view/View.html#invalidate%28%29
非常感謝你 – rogerstone 2011-04-02 19:06:40
簡單地說,invalidate()
方法可以從UI線程調用和postInvalidate()
可以從非UI線程爲了告訴Android的更新被稱爲我們的自定義視圖經過一些更改後才做出來的。
謝謝你的答案,我現在明白了。 – rogerstone 2011-04-02 19:07:11
我在你的答案中看到邏輯,但invalidate()也適用於我的非UI類。與postInvalidate()一樣好。 – JustBasti 2012-08-13 13:21:20
很好的答案。 Android文檔沒有解釋它的意圖是重繪視圖。清除它:) – Andy 2012-11-09 22:21:57