gpt4 book ai didi

android - 调用 invalidate(Rect) 时,ImageView 如何只重绘其部分内容?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:54 26 4
gpt4 key购买 nike

我是 Android 开发的新手,只是阅读文档并尝试蜜蜂。我很困惑 ImageView 是如何设法绘制一部分的无效(Rect)调用后的内容。

我检查了ImageView.java,发现除了onDraw(Canvas),但是 onDraw(Canvas) 只有在 drawable 是超出 View 的可见边界。我还阅读了 View.invalidate(Rect) 的实现,我认为这个函数的关键是调用 mParent.invalidateChild(this, r);但是,我认为父 View 不知道如何绘制 subview 给定的 Rect,它最终必须调用它的子方法来画出来。

有人研究过这部分代码吗?你能给我吗一些指南?

最佳答案

据我所知,有两个优化合而为一。首先,如果 subview 组是一个 View 组,则只有该组中与无效区域相交的那些 subview 才会被重绘。此外, Canvas 被裁剪到该矩形的边界。这意味着更少的像素必须通过总线洗牌到帧缓冲区,并且可以跳过完全裁剪的绘制操作。

这是一个半有根据的猜测。几个月前我浏览了源代码并且相当确定 ViewGroup 的事情。可以通过覆盖 onDraw 中的剪辑并检查它是否重绘所有内容来测试第二个。

关于android - 调用 invalidate(Rect) 时,ImageView 如何只重绘其部分内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2582292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com