gpt4 book ai didi

java - 是否应该在 invalidate(l,t,r,b) 之后显式设置剪辑区域?

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:46 24 4
gpt4 key购买 nike

那里的文档似乎表明,如果您使 View 的多个区域无效(使用 invalidate(l,t,r,b)),则无需在 onDraw() 方法中使用剪辑区域来指定这些区域。

另一方面,我见过许多自定义 View 的示例,它们在使区域无效的同时维护脏区域,然后在 onDraw() 方法中使用脏区域来裁剪 Canvas (例如,参见 the KeyBoardView class )

关于此问题的文档是否不完整? invalidate()clipRect() 应该同时使用吗?

最佳答案

不需要同时使用invalidate()和clipRect()。有时您可以单独使用它们,有时您可以一起使用它们。

作为 View 上的一个方法,invalidate() 作用于整个 View 级别。像这样使区域失效会导致 Android 仅重绘已失效的区域,因此您会因更改而推送更少的像素。

作为 Canvas 上的一个方法,clipRect() 会更改该 Canvas 上后续绘制操作的有效绘图空间。这允许您执行绘制操作,而无需调整计算以仅影响有限的空间。 Canvas 将确保如果您在该空间之外绘制,它将不会产生任何效果。您还可以累积剪辑区域以创建非矩形剪辑区域。

Canvas 不必与 View 关联。很多时候您只是想绘制位图以供以后使用。因此,在 Canvas 上使用 ClipRect() 可能与 View 有任何关系,也可能没有任何关系,即使如此,也可能与该 View 的失效有任何关系,也可能没有任何关系。如果您想将两者一起使用以优化非常大的绘图空间,则必须确保 View 的无效区域相当于 Canvas 的剪切区域,考虑到剪切区域并不总是简单的矩形,这并不总是简单的。

关于java - 是否应该在 invalidate(l,t,r,b) 之后显式设置剪辑区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36248741/

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