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()的原因是什么?