在Animator.AnimatorListener中deviseonAnimationCancel()的原因是什么?

Android SDK animation显示:

public void cancel()

取消animation。 与end()不同的是,cancel()会导致animation在其轨道上停止, 向其侦听器发送一个onAnimationCancel(Animator),然后是一个onAnimationEnd(Animator)消息。

仅在animation未取消时才调用某些方法。 以下是AOSP的DeskClock示例:

rotateAnimatorY.addListener(new AnimatorListenerAdapter() { private boolean mIsCanceled = false; @Override public void onAnimationCancel(Animator animation) { mIsCanceled = true; } @Override public void onAnimationEnd(Animator animation) { if (!mIsCanceled) { view.setRotation(0); } view.setLayerType(View.LAYER_TYPE_NONE, null); } }); 

onAnimationCancel()只设置一个mIsCanceled标志,所有的工作都在onAnimationEnd()中完成。 结合END状态和CANCEL状态,在所有情况下最多需要完成三类工作:

 a), cancel & end. These work can live in **onAnimationEnd()** b), cancel &!end. These live in **onAnimationCancel()** c), !cancel & end. These are annoying. 

对于c),你必须涉及一个像mIsCanceled标志。

我通过AOSP应用程序进行search,并没有发现onAnimationCancel()的单独方法的任何好处。 他们大多数只是“无所事事”或onAnimationEnd()代码的重复。

为什么不把取消标志合并到onAnimaitonEnd中:

 abstract void onAnimationEnd(Animator animation, boolean canceled) 

IMOP,它更优雅,重量更轻。

在Animator.AnimatorListener中deviseonAnimationCancel()的原因是什么?

Solutions Collecting From Web of "在Animator.AnimatorListener中deviseonAnimationCancel()的原因是什么?"