Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否应在失效(l、t、r、b)后显式设置剪辑区域?_Java_Android_Ondraw_Clip_Invalidation - Fatal编程技术网

Java 是否应在失效(l、t、r、b)后显式设置剪辑区域?

Java 是否应在失效(l、t、r、b)后显式设置剪辑区域?,java,android,ondraw,clip,invalidation,Java,Android,Ondraw,Clip,Invalidation,那里的文档似乎表明,如果您使视图的多个区域无效(使用invalidate(l,t,r,b)),则无需在onDraw()方法中使用clip region指定这些区域 另一方面,我看到了许多自定义视图的示例,它们在使区域无效的同时维护脏区域,然后使用脏区域在onDraw()方法中剪裁画布(例如,请参见) 关于这个问题的文件是否不完整?是否应该同时使用invalidate()和clipRect()?不要求同时使用invalidate()和clipRect()。有时你可以单独使用它们,有时你可以一起使用

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

另一方面,我看到了许多自定义视图的示例,它们在使区域无效的同时维护脏区域,然后使用脏区域在
onDraw()
方法中剪裁画布(例如,请参见)


关于这个问题的文件是否不完整?是否应该同时使用
invalidate()
clipRect()

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

作为视图上的一个方法,invalidate()在整个视图的级别上工作。使这样的区域无效会导致Android只重新绘制已无效的区域,因此更改后会推送更少的像素

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


画布不必与视图关联。很多时候,您只是想将其绘制成位图供以后使用。因此,在画布上使用clipRect()可能与视图有关,也可能与视图的无效性无关。如果要同时使用这两个选项来优化非常大的绘图空间,则必须确保视图的无效区域与画布的剪裁区域相等,这并不总是简单的,因为剪裁区域并不总是简单的矩形。

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

作为视图上的一个方法,invalidate()在整个视图的级别上工作。使这样的区域无效会导致Android只重新绘制已无效的区域,因此更改后会推送更少的像素

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


画布不必与视图关联。很多时候,您只是想将其绘制成位图供以后使用。因此,在画布上使用clipRect()可能与视图有关,也可能与视图的无效性无关。如果要同时使用这两个选项来优化非常大的绘图空间,则必须确保视图的无效区域与画布的剪裁区域相等,这并不总是简单的,因为剪裁区域并不总是简单的矩形。

我很清楚画布部分。无效的解释并不多。你说,
invalidate(…)
导致android只重绘一个区域。怎么做的?我如何从
onDraw()中知道要绘制的无效区域是什么?或者我应该编写代码来绘制整个视图,而android只绘制无效区域?(听起来很像
clipRect()
)画布部分对我来说很清楚。无效的解释并不多。你说,
invalidate(…)
导致android只重绘一个区域。怎么做的?我如何从
onDraw()中知道要绘制的无效区域是什么?或者我应该编写代码来绘制整个视图,而android只绘制无效区域?(听起来很像
clipRect()