2010-10-06 71 views
2

如果我用dirty rect参数使我的自定义视图的一部分无效(),如何获取draw()方法内的脏区域?画布的裁剪矩是不一样的 - 根据我的经验,它通常要大几倍。获取内部脏区域draw()

回答

2

从传递到Canvas对象中的clipRect获取onDraw方法。这个clipRect(Canvas :: getClipBounds)实际上是无效的Rect。

clipRect有时候会更大,因为不同的无效区域会被联合在一起,所以一个事件会被触发而不是出于性能原因而触发多个事件。

+0

在这种特殊情况下,没有其他无效。测试非常干净 - 只要我愿意,应用程序就会很紧张,然后我点击屏幕。这会导致重绘。不可能有另一个待决失效。 – 2010-10-06 15:39:00

+1

我在这里有相同的经历。 getClipRect返回整个视图的边界,而不是我传递给无效的小矩形。 – 2014-08-25 20:34:18

+0

我不认为这个答案是正确的 - 我的示例应用程序设置了一个小矩形,但Canvas.getClipBounds()总是返回整个视图的边界。 – greg7gkb 2016-03-19 03:13:09

3

如果脏矩形与传递给invalidate()的不一致,那是因为屏幕的另一个视图或区域也被无效。