我创建了一个自定义视图(我们称之为MyView
),它基本上只是使用画布在自身上绘制一些文本。要绘制的文本使用全局变量设置。
在程序执行期间的某个时刻,我想更改全局变量,并让MyView
重绘自己来更新文本。我尝试了findViewById()
然后invalidate()
,但这没有做任何事情。我怀疑由于MyView
内的任何内容都没有改变,因此它认为没有理由致电onDraw()
。有没有办法强制View重绘自己,即使它认为它不需要?
答案 0 :(得分:36)
如果我在MyView中有一个存储文本的成员变量,并为它创建一个公共setter,那么只调用该方法会导致MyView重绘自己
在View
内设置变量不会调用View上的绘图。事实上,视图系统既不知道也不关心内部变量。
在视图上调用invalidate()
会导致它通过视图绘制自己。你应该看一下:http://developer.android.com/guide/topics/ui/custom-components.html。
当您调用TextView
并通过setText()
调用使用新文本集重绘自身时,setText()
会在内部使自身无效。你也应该做类似的事情。
答案 1 :(得分:1)
好的,我明白了。如果我在存储文本的MyView
中有一个成员变量,并为它创建一个公共setter,那么只调用该方法会导致MyView
重绘自己。简单!