Android 无法清除视图上的动画?

SSP*_*SSP 1 animation android

所以我使用这个方法来view无限时间地设置 a 的动画:

    private void animateView (final View view) {
        final Animation animationIn = AnimationUtils.loadAnimation(this,R.anim.fade_in);
        final Animation animationOut = AnimationUtils.loadAnimation(this, R.anim.fade_out);

        animationIn.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                view.startAnimation(animationOut);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        animationOut.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                view.startAnimation(animationIn);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        view.startAnimation(animationIn);
    }
Run Code Online (Sandbox Code Playgroud)

我使用这种方法是因为它似乎animation.setRepeatMode()不起作用animation.setRepeatCount(),经过一番搜索后我发现它们基本上都是错误的。

但当我打电话时myView.clearAnimation(),它一直在动画。问题是什么?

Ben*_* P. 5

问题是调用clearAnimation() 结束当前动画...这会触发您的onAnimationEnd()方法,开始一个新的动画。

我将创建一个布尔标志来跟踪动画是否应该循环,并在您想要取消动画时将其关闭。

  • 创建标志(默认为 true)
private boolean shouldRepeatAnimations = true;
Run Code Online (Sandbox Code Playgroud)
  • 读取该标志以确定动画是否应该循环:
@Override
public void onAnimationEnd(Animation animation) {
    if (shouldRepeatAnimations) {
        view.startAnimation(animationIn);
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 当你想取消动画时,也关闭标志:
shouldRepeatAnimations = false;
view.clearAnimation();
Run Code Online (Sandbox Code Playgroud)