我需要停止一个运行翻译动画。Animation的.cancel()方法没有效果;不管怎样,动画会一直播放到最后。

如何取消正在运行的动画?


当前回答

为了停止动画,你可以设置这样的objectAnimator不做任何事情,例如:

首先,当手动翻转时,会出现从左到右的动画:

flipper.setInAnimation(leftIn);
flipper.setOutAnimation(rightOut);

当切换到自动翻转时,就没有动画了

flipper.setInAnimation(doNothing);
flipper.setOutAnimation(doNothing);

doNothing = ObjectAnimator.ofFloat(flipper, "x", 0f, 0f).setDuration(flipperSwipingDuration);

其他回答

首先,移除所有与animatior或animator set相关的监听器。然后取消动画器或动画器集。

 inwardAnimationSet.removeAllListeners()
        inwardAnimationSet.cancel()

在Android 4.4.4,似乎唯一的方法我可以停止一个alpha淡出动画的视图是调用View.animate().cancel()(即,调用.cancel()在视图的ViewPropertyAnimator)。

以下是我在ICS之前和之后使用的兼容性代码:

public void stopAnimation(View v) {
    v.clearAnimation();
    if (canCancelAnimation()) {
        v.animate().cancel();
    }
}

…计算方法:

/**
 * Returns true if the API level supports canceling existing animations via the
 * ViewPropertyAnimator, and false if it does not
 * @return true if the API level supports canceling existing animations via the
 * ViewPropertyAnimator, and false if it does not
 */
public static boolean canCancelAnimation() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
}

这是我正在停止的动画:

v.setAlpha(0f);
v.setVisibility(View.VISIBLE);
// Animate the content view to 100% opacity, and clear any animation listener set on the view.
v.animate()
    .alpha(1f)
    .setDuration(animationDuration)
    .setListener(null);

在你调用startAnimation()的视图上调用clearAnimation()。

Use the method setAnimation(null) to stop an animation, it exposed as public method in View.java, it is the base class for all widgets, which are used to create interactive UI components (buttons, text fields, etc.). /** * Sets the next animation to play for this view. * If you want the animation to play immediately, use * {@link #startAnimation(android.view.animation.Animation)} instead. * This method provides allows fine-grained * control over the start time and invalidation, but you * must make sure that 1) the animation has a start time set, and * 2) the view's parent (which controls animations on its children) * will be invalidated when the animation is supposed to * start. * * @param animation The next animation, or null. */ public void setAnimation(Animation animation)

为了停止动画,你可以设置这样的objectAnimator不做任何事情,例如:

首先,当手动翻转时,会出现从左到右的动画:

flipper.setInAnimation(leftIn);
flipper.setOutAnimation(rightOut);

当切换到自动翻转时,就没有动画了

flipper.setInAnimation(doNothing);
flipper.setOutAnimation(doNothing);

doNothing = ObjectAnimator.ofFloat(flipper, "x", 0f, 0f).setDuration(flipperSwipingDuration);