在 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高清巨图加载方案

在android中查看onDraw(Canvas c)与draw(Canvas c)?

Android 全成型 Button

android LinearLayout中嵌套一个textview,当textview更新时会触发LinearLayout也更新。用啥办法可以让

Android 自定义 view—— onDraw

Invalidate()不会在Xamarin.Android中调用OnDraw()