在 Android 上的 onDraw 之外更新视图的画布
Posted
技术标签:
【中文标题】在 Android 上的 onDraw 之外更新视图的画布【英文标题】:Update view's canvas outside of onDraw on Android 【发布时间】:2014-08-11 19:19:11 【问题描述】:我需要更新一小部分自定义视图以显示小动画。视图的其余部分只有静态图像。最直接的方法是获取视图的画布并仅直接更新该特定部分。但无论如何我都找不到在 view::onDraw 方法之外获取视图的画布对象。
我知道的唯一替代方法是:使用指定的矩形调用 view::invalidate() 以最小化绘图闪烁。我有代码来更新 onDraw 中的整个视图。所以最好的办法是检测裁剪的矩形,只运行代码更新指定区域,以尽量减少 CPU 使用率?
【问题讨论】:
【参考方案1】:我想我会尽我所能回答这个问题。
-
在 onDraw 方法之外不能直接访问画布。
虽然我们可以使用函数 Canvas.getClipBounds() 检测剪切矩形,但如果启用 GPU,getClipBounds 函数总是返回整个视图区域。当不使用 GPU 时,getClipBounds() 返回实际的脏区。由于大多数手机中都有 GPU,因此 getClipBounds 函数几乎毫无用处。
【讨论】:
以上是关于在 Android 上的 onDraw 之外更新视图的画布的主要内容,如果未能解决你的问题,请参考以下文章
在android中查看onDraw(Canvas c)与draw(Canvas c)?
android LinearLayout中嵌套一个textview,当textview更新时会触发LinearLayout也更新。用啥办法可以让