【问题标题】:Getting the dirty region inside draw()在 draw() 中获取脏区
【发布时间】:2013-07-11 22:27:46
【问题描述】:

如果我使用脏矩形参数使自定义视图的一部分无效(),我如何在 draw() 方法中获取脏矩形?画布的剪切矩形不一样 - 根据我的经验,它通常大几倍。

【问题讨论】:

    标签: android


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      从传入的 Canvas 对象中获取 clipRect 到 onDraw 方法。这个clipRect(Canvas::getClipBounds)其实就是失效的Rect。

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

      【讨论】:

      • 在这种特殊情况下,没有其他无效。测试非常干净 - 应用程序只要我愿意,我就会一直保持紧张,然后我点击屏幕。这会导致重绘。不可能有另一个待处理的失效。
      • 我在这里也有同样的经历。 getClipRect 返回整个视图的边界,而不是我传递给无效的小矩形。
      • 我认为这个答案不正确 - 我的示例应用设置了一个小矩形,但 Canvas.getClipBounds() 始终返回整个视图的边界。
      • 据此:stackoverflow.com/a/8947772/1942069 似乎使用硬件加速视图会将剪辑边界设置为整个视图。但是,无论如何,只会绘制与剪辑矩形相交的部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      相关资源
      最近更新 更多