为啥部分无效跨越整个视图?

Posted

技术标签:

【中文标题】为啥部分无效跨越整个视图?【英文标题】: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),它的工作原理是否相同? 将其设置为硬件似乎可以工作,但“软件”和“无”不起作用。 【参考方案1】:

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

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

【讨论】:

感谢您的解释 :) 我正在努力研究到底发生了什么

以上是关于为啥部分无效跨越整个视图?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 margin-top 会将整个部分向下移动? [复制]

为啥表格视图部分标题视图出现在表格标题视图上方?

如何让 vuetify 数据表在卡片内时跨越容器的整个宽度?

SwiftUI,为啥部分视图没有刷新? @State 变量未更新

当我尝试加载部分视图时,为啥会加载新页面?

为啥我的 ajax 部分视图呈现在新页面上?