我是Android开发的新手,只是阅读文档并尝试了 蜜蜂。我不知道ImageView如何设法绘制的一部分 无效(Rect)调用后的内容。
我查过了ImageView.java,发现没有其他绘图方法除外 onDraw(Canvas),但是onDraw(Canvas)只在它是的时候才切断drawable beyound视图的可见边界。 我也读过View.invalidate(Rect)的实现,我觉得 这个函数的关键是调用 mParent.invalidateChild(this,r); 但是,我认为父视图不知道如何绘制子项 给定的Rect,它最终必须调用它的一些方法 画出来。
有人调查过这部分代码吗?你能不能给我 一些指南?
答案 0 :(得分:3)
据我所知,有两种优化方式。例如,如果子视图是一个视图组,则只重绘与该无效区域相交的该组的子视图。此外,画布被剪裁到此rect的边界。这意味着必须将较少的像素通过总线混洗到帧缓冲区,并且可以跳过完全剪切的绘制操作。
这是一个半教育的猜测。几个月前我浏览了源码,并且相当肯定ViewGroup的事情。可以通过覆盖onDraw中的裁剪并检查它是否重绘所有内容来测试第二个。
答案 1 :(得分:1)
我猜这段代码在View
类。
google小组中的Romain Guy有两个有趣的答案。
答案 2 :(得分:0)