【问题标题】:Force a View to redraw itself强制视图重绘自身
【发布时间】:2011-10-19 03:06:06
【问题描述】:

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

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

【问题讨论】:

标签: java android


【解决方案1】:

如果我在 MyView 中有一个存储文本的成员变量,并为它创建一个公共设置器,那么只需调用该方法就会导致 MyView 重绘自身

View 中设置变量不会调用视图上的绘图。事实上,视图系统既不知道也不关心内部变量。

在 View 上调用 invalidate() 会导致它通过 View 绘制自己。你应该看看这个:http://developer.android.com/guide/topics/ui/custom-components.html

当您调用 setText() 时,TextView 会在内部使自己无效,并使用通过 setText() 调用设置的新文本重新绘制自己。你也应该做类似的事情。

【讨论】:

  • 对不起,你是对的,我确实打电话给invalidate()。我的意思是说调用invalidate() 不起作用,因为我正在更改的变量在View 的外部(它是全局的)。所以我创建了一个内部变量并在失效之前对其进行了更改。
【解决方案2】:

好的,我想通了。如果我在 MyView 中有一个成员变量来存储文本,并为它创建一个公共设置器,那么只需调用该方法就会导致 MyView 重绘自身。简单!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2012-06-22
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多