2015-10-25 62 views

回答

1

不,这是不可能的(在正常意义上)。当您有多个视图时,在一个视图上调用invalidate()将重绘所有这些视图。当在视图上调用invalidate()时,它将重绘任何位于dirty region中的内容。这在ViewGroup中由dispathDraw()方法处理。 dispatchDraw() inturn调用drawChild(),这就是为什么当我们在一个视图上调用invalidate()时,其他视图也会被绘制。

这就是说,你可以在你自己的自定义ViewGroup中覆盖dispatchDraw()方法,并处理事情的表现。

+0

谢谢。我正在试验使下层视图成为RelativeLayout的子类,以便覆盖视图直接由它处理。重写dispatchDraw()肯定是可行的。 –

+0

感叹。刚看过'dispatchDraw()'的源代码 - 它比我愿意覆盖的方式更复杂。我希望只有一种说法“使这种观点无效,而不是其他人”。 –

+0

更新:如果视图具有不透明背景,则它**是可能的。见下文。 –

0

另外:我刚发现,如果你给视图一个不透明的背景,使它失效不会使底层View失效。这不是一个完美的解决方案,但它是一个很好的解决方案。

现在我需要看看是否有可能使一个非矩形形状的视图。

相关问题