检查动画师集是否已完成动画



我正在尝试使用AnimatorSet在动画中淡入淡出的按钮进行动画处理

Button fades in > Click button > Remaining buttons fade out

所以为了做到这一点,我想设置onClickListner after the animation is completed,但这似乎不起作用。单击动画中间的按钮triggers the onClick action

setQuestion = new AnimatorSet();           
setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fadeinAnimation4,fadeinAnimation5);
setQuestion.start();

这是检查if the animation has finished的方法。

private void checkAnimation() {
    while (true) {
        // Check if animation has ended
        if (setQuestion.isRunning() == false) {
            assignListners();
            break;
        }
    }
}

您可以在fadeinAnimation5上设置AnimatorListener。这将给你一个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) {
                // ...
            }
        });

或者,按照 slott 的建议,使用 AnimatorListenerAdapter

fadeinAnimation5.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(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();
}

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

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();

最新更新