当前位置: 代码迷 >> Android >> 是否可以在不强制重绘基础View的情况下重绘View?
  详细解决方案

是否可以在不强制重绘基础View的情况下重绘View?

热度:54   发布时间:2023-08-04 11:51:54.0

我在顶部绘制了一个大的自定义视图(地图)和一个较小的视图(高度计)。

有什么方法可以在不强制完全重绘底部视图的情况下更新顶部视图?

不,这是不可能的(在正常情况下)。 当您具有多个彼此invalidate()视图时,在一个视图上调用invalidate()将重绘所有这些视图。 在视图上调用invalidate() ,它将重绘dirty region 这是通过ViewGroupdispathDraw()方法进行的。 dispatchDraw() drawChild()调用drawChild() ,这就是为什么当我们在一个视图上调用invalidate()时,也会绘制其他视图的原因。

话虽如此,您可以在自己的自定义ViewGroup重写dispatchDraw()方法并处理事物的行为。

另外:我刚刚发现,如果为View提供不透明的背景,则对其进行无效化将不会使基础View无效。 这不是一个完美的解决方案,但它是一个很好的解决方案。

现在,我需要查看是否可以制作非矩形的View。

  相关解决方案