我做在本地代码中的一些位图动画,所以我需要重绘ImageView的每一帧:View.invalidate()非常慢。备择方案?
class MyImageView extends ImageView
{
...
protected void onDraw(Canvas canvas)
{
native_drawStuff(handle, canvas);
invalidate();
}
}
似乎一切都很好,除了Traceview表明这一点:
我不了解你,但这似乎有点荒谬。 native_drawStuff()设置位图的每个像素,然后将位图绘制到画布上,并且简单的invalidate()调用几乎需要4倍于?位图也不小(RGBA_8888和从50k到300k像素的任何位置)。
鉴于我需要重新绘制整个ImageView的每一帧,有没有更好的方法来做到这一点?我所看到的唯一建议是仅使视图中需要重绘的部分无效,但对我而言,这是整个事情。
你为什么在onDraw()失效?这表明你可能不知道如何使无效的作品? – Simon
我从onDraw()失效,因为在逻辑上它应该实现我的动画的最大刷新率。该文档对无效()进行了说明:“如果视图可见,onDraw(android.graphics.Canvas)将在未来的某个时刻调用”,这正是我想要的行为。如果不经常失效,动画不会更新。 – foo64