Fel*_*x.D 15 animation android
Android SDK Animator显示:
public void cancel()
取消动画.与end()不同,cancel()会使动画在其轨道中停止,向其侦听器发送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);
}
});
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
对于c),你必须涉及像mIsCanceled这样的旗帜.
我搜索AOSP应用程序,并没有找到任何有关onAnimationCancel()的单独方法的好处.他们中的大多数只是"什么都不做"或复制onAnimationEnd()代码.
为什么不将取消标志合并到onAnimaitonEnd:
abstract void onAnimationEnd(Animator animation, boolean canceled)
Run Code Online (Sandbox Code Playgroud)
IMOP,它更优雅,重量更轻.
在Animator.AnimatorListener中设计onAnimationCancel()的原因是什么?