Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:cancel()对动画无效_Java_Android_Animation_Cancellation_Objectanimator - Fatal编程技术网

Java Android:cancel()对动画无效

Java Android:cancel()对动画无效,java,android,animation,cancellation,objectanimator,Java,Android,Animation,Cancellation,Objectanimator,我一直在做一个小游戏,我需要一个进度条动画,当我第一次触摸按钮时开始,如果我在动画结束前再次触摸按钮,进度条需要重置 在我的代码animation.start()中运行良好,但动画.cancel()似乎不起作用 包含无效行的我的活动代码: public class MainActivity extends Activity { Button b_bleu; PrgressBar bar1; @Override public void onWindowFocu

我一直在做一个小游戏,我需要一个进度条动画,当我第一次触摸按钮时开始,如果我在动画结束前再次触摸按钮,进度条需要重置

在我的代码
animation.start()中运行良好,但
动画.cancel()
似乎不起作用

包含无效行的我的活动代码:

public class MainActivity extends Activity {

    Button b_bleu;
    PrgressBar bar1;

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        b_bleu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            ObjectAnimator animation = ObjectAnimator.ofInt(bar1, "progress", 100, 0);
            animation.setDuration(5000);
            animation.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animator) {

                }

                @Override
                public void onAnimationEnd(Animator animator) {
                    //application se termine
                }

                @Override
                public void onAnimationCancel(Animator animator) {

                }

                @Override
                public void onAnimationRepeat(Animator animator) {

                }
            });

            animation.cancel();
            animation.start();
        }
    });  
}

我认为问题在于
animation.cancel()
没有效果,因为您调用了
animation.start()就在它后面

试着这样做:

声明一个字段:

private boolean mStarted = false;
然后在动画回调中设置它并检查其值:

animation.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
        mHasStarted = true;
    }

    @Override
    public void onAnimationEnd(Animator animation) {
        mHasStarted = false; // reset the field value so that it can be started again onClick once it has ened
    }

    @Override
    public void onAnimationCancel(Animator animation) {
       mHasStarted = false;
    }
});

if (mStarted) {
    animation.cancel();
} else {
    animation.start();
}

希望这有帮助

你能详细说明一下“似乎不起作用”吗?你预计会发生什么?实际发生了什么?谢谢你的回答,但我找到了一个动画解决方案。setAutoCancel(false):)如果有人想要代码,请问我;)