强制视图重绘自身

时间:2011-08-03 13:34:55

标签: java android

我创建了一个自定义视图(我们称之为MyView),它基本上只是使用画布在自身上绘制一些文本。要绘制的文本使用全局变量设置。

在程序执行期间的某个时刻,我想更改全局变量,并让MyView重绘自己来更新文本。我尝试了findViewById()然后invalidate(),但这没有做任何事情。我怀疑由于MyView内的任何内容都没有改变,因此它认为没有理由致电onDraw()。有没有办法强制View重绘自己,即使它认为它不需要?

2 个答案:

答案 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重绘自己。简单!