2011-08-03 39 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自身重绘。简单!