gpt4 book ai didi

Android:无效(脏)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:25 29 4
gpt4 key购买 nike

Android 似乎真的不喜欢invalidate (Rect dirty),它用于仅使 Canvas 的一部分无效。当我使 Canvas 的一部分(下面以绿色显示)无效并且需要同时重绘 Canvas 的 ToggleButton outside 时,以红色显示的整个区域是删除!似乎 Android 只是使包含需要重绘的两个区域的并集的最小矩形内的所有内容无效,即使其中一个区域位于我要使其无效的 Canvas 的 View 之外。

这是标准行为吗?如果是,为什么会有人使用部分失效?

enter image description here

最佳答案

Android 有一个名为 ViewRootImpl 的类。此类由您在屏幕上看到的每个窗口拥有(术语窗口在这里有点困惑,因此对于此解释,窗口是主要 Activity 的布局,顶部没有任何对话框或弹出窗口)。这个布局一直在被遍历,这意味着 Android 只是在等待这个窗口有一个脏矩形并绘制它。由于这个窗口可能包含许多 View (按钮等),它遍历所有 View 并询问每个 View 是否需要重绘。每个 View 返回一个脏矩形到 ViewRootImpl,所有这些矩形都连接到一个大矩形,最后重绘。

为什么要这样做?嗯,ViewRootImplWindowManagerService 请求一个 Canvas 来绘制。这意味着每次遍历时,一个窗口中的所有 View 实际上共享一个 Canvas

关于你的问题,如果只有一个特定的 View 有一个脏矩形,那么只会绘制那个脏矩形,但由于另一个 View 也有一个脏矩形,所以脏矩形包含两个。

关于Android:无效(脏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14077008/

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