我創建了一個自定義視圖(我們稱它爲MyView
),它基本上只是使用畫布在自己上繪製一些文本。要繪製的文本是使用全局變量設置的。強制視圖重畫自己
在程序執行過程中的某個時刻,我想要更改全局變量,並讓MyView
重繪本身來更新文本。我試過findViewById()
,然後invalidate()
,但這沒有任何作用。我懷疑由於MyView
內沒有任何更改,它認爲它沒有理由撥打onDraw()
。有什麼方法可以強制視圖重新繪製自己,即使它認爲它不需要?
我創建了一個自定義視圖(我們稱它爲MyView
),它基本上只是使用畫布在自己上繪製一些文本。要繪製的文本是使用全局變量設置的。強制視圖重畫自己
在程序執行過程中的某個時刻,我想要更改全局變量,並讓MyView
重繪本身來更新文本。我試過findViewById()
,然後invalidate()
,但這沒有任何作用。我懷疑由於MyView
內沒有任何更改,它認爲它沒有理由撥打onDraw()
。有什麼方法可以強制視圖重新繪製自己,即使它認爲它不需要?
如果我有一個存儲的文本MyView的內部成員變量,併爲它創建一個公共setter方法,那麼就調用該方法使MyView的重繪自身
設置裏面的一個變量View
將不會在視圖上調用繪圖。事實上,觀察系統既不知道也不關心內部變量。
在視圖上調用invalidate()
會導致它通過視圖繪製自己。你應該檢查這個:http://developer.android.com/guide/topics/ui/custom-components.html。
A TextView
當您調用setText()
時,內部會使自己失效,並使用調用setText()
調用的新文本重新繪製自己。你也應該做類似的事情。
好吧,所以我想通了。如果我在MyView
中有一個用於存儲文本的成員變量,併爲其創建公共setter,那麼調用該方法會導致MyView
自身重繪。簡單!
對不起,你說得對,我的確確實叫了'invalidate()'。我的意思是說,調用'invalidate()'不起作用,因爲我改變的變量是'View'外部的(它是全局的)。所以我創建了一個內部變量並在無效之前改變了它。 –