【问题标题】:Why does partial invalidate span the entire View?为什么部分无效跨越整个视图?
【发布时间】:2015-10-08 07:36:45
【问题描述】:

我正在尝试使 android 视图部分无效。我使用 View.invalidate( l, t, b, r ) 并且它似乎正确地使垂直(顶部和底部)值无效,但是,无论我使用哪个左右值,它都会使整个视图无效。

例如,我的视图是灰色的。我希望使绿色区域无效,但是,它使绿色和红色区域无效。它总是跨越整个视图的整个水平方向。我尝试设置较小的值,例如 View.invalidate( 0, 0, 50, 50 ),但它仍然会导致这种行为。

Image Link (not enough rep to post images)

为什么会这样?

【问题讨论】:

  • 无论您使用何种图层类型 (View#setLayerType),它的工作原理是否相同?
  • 将其设置为硬件似乎可以工作,但“软件”和“无”不起作用。

标签: android android-view android-view-invalidate


【解决方案1】:

行为随着硬件加速而改变,Honeycomb 之后的默认值。现在,当您 invalidate() 提供脏区域的视图时,未设置剪辑绑定 (canvas.getClipBounds())。但是,只有与脏区相交的对象才会被重绘。

参考this渲染管道作者Romain Guy的回答。

【讨论】:

  • 感谢您的解释 :) 我正在努力研究到底发生了什么
猜你喜欢
  • 1970-01-01
  • 2019-11-16
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多