Android 在onDraw()中调用invalidate()是一种好的编程实践吗? 在onDraw()内部调用invalidate()是否是一种良好的编程实践
根据我的理解,在Android 在onDraw()中调用invalidate()是一种好的编程实践吗? 在onDraw()内部调用invalidate()是否是一种良好的编程实践,android,ondraw,Android,Ondraw,根据我的理解,在onDraw()内部调用invalidate()代价高昂,如果画布没有更改,则不需要调用 invalidate()是否等同于异步版本的onDraw() 据我了解,它们是等价的。如果我错了,请纠正我。谢谢。如果您的数据已更改且需要重新绘制,请仅调用invalidate()。您通常不会在onDraw()中执行此操作,因为此时您正在绘制当前数据,而不是对其进行更改。(在某些情况下,您可能希望这样做,例如运行动画,但通常我建议使用延迟消息来控制您自己的更新时间。)感谢您的澄清。在运行动画
onDraw()
内部调用invalidate()
代价高昂,如果画布没有更改,则不需要调用
invalidate()
是否等同于异步版本的onDraw()
据我了解,它们是等价的。如果我错了,请纠正我。谢谢。如果您的数据已更改且需要重新绘制,请仅调用
invalidate()
。您通常不会在onDraw()
中执行此操作,因为此时您正在绘制当前数据,而不是对其进行更改。(在某些情况下,您可能希望这样做,例如运行动画,但通常我建议使用延迟消息来控制您自己的更新时间。)感谢您的澄清。在运行动画时是否有可能从onDraw()
调用invalidate()
(这就是我想做的)可能会导致堆栈溢出,或者这种关系是间接的?@Andrewyld请看,View.onDraw将调用ExplosionAnimator.draw方法,并直接调用invalidate()。在我的手机上,调用invalidate将使爆炸动画更平滑。postInvalidate有时会导致动画下降帧。