问题描述
我在顶部绘制了一个大的自定义视图(地图)和一个较小的视图(高度计)。
有什么方法可以在不强制完全重绘底部视图的情况下更新顶部视图?
1楼
不,这是不可能的(在正常情况下)。
当您具有多个彼此invalidate()视图时,在一个视图上调用invalidate()将重绘所有这些视图。
在视图上调用invalidate() ,它将重绘dirty region 。
这是通过ViewGroup的dispathDraw()方法进行的。
dispatchDraw() drawChild()调用drawChild() ,这就是为什么当我们在一个视图上调用invalidate()时,也会绘制其他视图的原因。
话虽如此,您可以在自己的自定义ViewGroup重写dispatchDraw()方法并处理事物的行为。
2楼
另外:我刚刚发现,如果为View提供不透明的背景,则对其进行无效化将不会使基础View无效。 这不是一个完美的解决方案,但它是一个很好的解决方案。
现在,我需要查看是否可以制作非矩形的View。