在Animator.AnimatorListener中设计onAnimationCancel()的原因是什么?

时间:2014-10-13 08:34:26

标签: android animation

Android SDK Animator显示:

  

public void cancel()

     

取消动画。与end()不同,取消()   导致动画停在其轨道上,发送一个   onAnimationCancel(Animator)给它的听众,接着是一个   onAnimationEnd(Animator)消息。

仅在动画未取消时调用某些方法。 以下是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状态,在所有情况下最多需要完成3种类型的工作:

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应用程序,并没有找到任何有关 onAnimationCancel()的单独方法的好处。其中大多数只是“不做任何事”或复制onAnimationEnd()代码。

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

abstract void   onAnimationEnd(Animator animation, boolean canceled)

IMOP,它更优雅和重量轻。

在Animator.AnimatorListener中设计onAnimationCancel()的原因是什么?

0 个答案:

没有答案