2011-08-03 73 views
18

我創建了一個自定義視圖(我們稱它爲MyView),它基本上只是使用畫布在自己上繪製一些文本。要繪製的文本是使用全局變量設置的。強制視圖重畫自己

在程序執行過程中的某個時刻,我想要更改全局變量,並讓MyView重繪本身來更新文本。我試過findViewById(),然後invalidate(),但這沒有任何作用。我懷疑由於MyView內沒有任何更改,它認爲它沒有理由撥打onDraw()。有什麼方法可以強制視圖重新繪製自己,即使它認爲它不需要?

回答

30

如果我有一個存儲的文本MyView的內部成員變量,併爲它創建一個公共setter方法,那麼就調用該方法使MyView的重繪自身

設置裏面的一個變量View將不會在視圖上調用繪圖。事實上,觀察系統既不知道也不關心內部變量。

在視圖上調用invalidate()會導致它通過視圖繪製自己。你應該檢查這個:http://developer.android.com/guide/topics/ui/custom-components.html

A TextView當您調用setText()時,內部會使自己失效,並使用調用setText()調用的新文本重新繪製自己。你也應該做類似的事情。

+1

對不起,你說得對,我的確確實叫了'invalidate()'。我的意思是說,調用'invalidate()'不起作用,因爲我改變的變量是'View'外部的(它是全局的)。所以我創建了一個內部變量並在無效之前改變了它。 –

0

好吧,所以我想通了。如果我在MyView中有一個用於存儲文本的成員變量,併爲其創建公共setter,那麼調用該方法會導致MyView自身重繪。簡單!