2011-04-02 43 views
55

Android中的postInvalidate()函數有什麼用?我在很多地方都看到了這個功能。當我用Google搜索,我想出了這麼多:postInvalidate()是做什麼的?

postInvalidate-- 後的UI線程上的無效請求

我不知道是什麼短語「無效請求」有手段。有人能詳細解釋這裏發生了什麼嗎?

回答

110

從View類派生的每個類都有invalidatepostInvalidate方法。如果調用invalidate,它會告訴系統當前視圖已更改,並且應該儘快重新繪製。由於只能從UIThread調用此方法,因此當您不在UIThread中時仍需要另一種方法,並且仍想通知系統您的View已更改。 postInvalidate方法從非UIThread中通知系統,視圖將盡快在UIThread的下一個事件回調中重新繪製。 SDK文檔中也是briefly explained

只是比較無效post驗證

+1

謝謝你的答案,我現在明白了。 – rogerstone 2011-04-02 19:07:11

+1

我在你的答案中看到邏輯,但invalidate()也適用於我的非UI類。與postInvalidate()一樣好。 – JustBasti 2012-08-13 13:21:20

+1

很好的答案。 Android文檔沒有解釋它的意圖是重繪視圖。清除它:) – Andy 2012-11-09 22:21:57

19

通過這種方法(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

+1

非常感謝你 – rogerstone 2011-04-02 19:06:40

1

簡單地說,invalidate()方法可以從UI線程調用和postInvalidate()可以從非UI線程爲了告訴Android的更新被稱爲我們的自定義視圖經過一些更改後才做出來的。