Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.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
Android 检查AnimatorSet是否已完成动画?_Android_Animation_Objectanimator - Fatal编程技术网

Android 检查AnimatorSet是否已完成动画?

Android 检查AnimatorSet是否已完成动画?,android,animation,objectanimator,Android,Animation,Objectanimator,我正在尝试使用AnimatorSet 按钮淡入>单击按钮>其余按钮淡出 因此,为了做到这一点,我想在动画完成后设置onClickListner,但这似乎不起作用。点击动画中间的按钮触发OnCutton动作 >: setQuestion = new AnimatorSet(); setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fad

我正在尝试使用
AnimatorSet

按钮淡入>单击按钮>其余按钮淡出

因此,为了做到这一点,我想在动画完成后设置
onClickListner
,但这似乎不起作用。点击动画<代码>中间的按钮触发OnCutton动作 >:

setQuestion = new AnimatorSet();           
setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fadeinAnimation4,fadeinAnimation5);
setQuestion.start();
这是检查动画是否已完成的方法

private void checkAnimation() {
    while (true) {
        // Check if animation has ended
        if (setQuestion.isRunning() == false) {
            assignListners();
            break;
        }
    }
}
您可以在fadeinAnimation5上设置。 这将给您一个onAnimationEnd回调

fadeinAnimation5.addListener(new AnimatorListener() {

            @Override
            public void onAnimationStart(Animator animation) {
                // ...
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                // ...
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                // ...
            }

            @Override
            public void onAnimationCancel(Animator animation) {
                // ...
            }
        });
或者,如使用


我遇到了一个类似的问题,下面是我如何解决的:

private void crossFadeAnimation(final View fadeInTarget, final View fadeOutTarget, long duration){
    AnimatorSet mAnimationSet = new AnimatorSet();
    ObjectAnimator fadeOut = ObjectAnimator.ofFloat(fadeOutTarget, View.ALPHA,  1f, 0f);
    fadeOut.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            fadeOutTarget.setVisibility(View.GONE);
        }

        @Override
        public void onAnimationCancel(Animator animation) {
        }

        @Override
        public void onAnimationRepeat(Animator animation) {
        }
    });
    fadeOut.setInterpolator(new LinearInterpolator());

    ObjectAnimator fadeIn = ObjectAnimator.ofFloat(fadeInTarget, View.ALPHA, 0f, 1f);
    fadeIn.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
            fadeInTarget.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animator animation) {}

        @Override
        public void onAnimationCancel(Animator animation) {}

        @Override
        public void onAnimationRepeat(Animator animation) {}
    });
    fadeIn.setInterpolator(new LinearInterpolator());
    mAnimationSet.setDuration(duration);
    mAnimationSet.playTogether(fadeOut, fadeIn);
    mAnimationSet.start();
}

实际上,可以直接将侦听器设置为AnimatorSet,因为AnimatorSet继承自Animator。下面是一些代码:

import android.animation.Animator;

        AnimatorSet setQuestion = new AnimatorSet();
        setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fadeinAnimation4,fadeinAnimation5);
        setQuestion.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {

            }

            @Override
            public void onAnimationEnd(Animator animator) {
            // !! turn on your onClickListener here !!
            }

            @Override
            public void onAnimationCancel(Animator animator) {

            }

            @Override
            public void onAnimationRepeat(Animator animator) {

            }
        });
        setQuestion.start();

下面是如何添加AnimatorListner的方法:如果您不需要所有事件,可以使用AnimatorListeneraAdapter,这样可以使事情变得更简单。我喜欢的一个警告注释。如果动画完成或取消,则同时调用onAnimationEnd回调。要仅在动画完成时收到通知,请改用withEndAction(Runnable)。
import android.animation.Animator;

        AnimatorSet setQuestion = new AnimatorSet();
        setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fadeinAnimation4,fadeinAnimation5);
        setQuestion.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {

            }

            @Override
            public void onAnimationEnd(Animator animator) {
            // !! turn on your onClickListener here !!
            }

            @Override
            public void onAnimationCancel(Animator animator) {

            }

            @Override
            public void onAnimationRepeat(Animator animator) {

            }
        });
        setQuestion.start();