web-dev-qa-db-fra.com

Comment faire quelque chose quand une animation se termine?

J'ai une ImageView que j'utilise pour montrer les progrès via une AnimationDrawable. Quand je veux montrer ma progression spinner, je fais ceci:

animDrawable.start();
ObjectAnimator.ofFloat(view, "alpha", 1.0f).setDuration(300).start();

Quand je veux cacher la casserole, je fais ceci:

ObjectAnimator.ofFloat(view, "alpha", 0.0f).setDuration(300).start();
animDrawable.stop();

Cependant, cela a pour effet que l'animation s'arrête immédiatement. Je voudrais qu’il ne s’arrête que lorsque la ObjectAnimator est complètement passée à 0.0 alpha. Est-il possible de configurer quelque chose comme un rappel "AnimationCompleted"?

42
i_am_jorf

La méthode la plus moderne consiste à utiliser la ViewPropertyAnimator :

view.animate()
    .alpha(0f)
    .withEndAction(new Runnable() {
      @Override
      public void run() {
        // Do something.
      }
    })
    .start();

Ou, si vous utilisez RetroLambda:

view.animate()
    .alpha(0f)
    .withEndAction(() -> {
      // Do something.
    })
    .start();
38
i_am_jorf

Pour répondre à votre question initiale sur l'objet ObjectAnimator, vous pouvez configurer un objet Animator.AnimatorListener qui définit plusieurs rappels d'état de l'animation. Vous voulez remplacer le vide public onAnimationEnd (animation Animator)

animation.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {

                }

                @Override
                public void onAnimationEnd(Animator animation) {
                    Toast.makeText(VideoEditorActivity.this, "animation ended", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onAnimationCancel(Animator animation) {

                }

                @Override
                public void onAnimationRepeat(Animator animation) {

                }
            });
10
Aaron Dancygier

Vous pouvez également regarder dans postOnAnimation (Runnable)

Lien vers Docs: postOnAnimation (Java.lang.Runnable)

0
ProjectDelta