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