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"?
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();
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) {
}
});
Vous pouvez également regarder dans postOnAnimation (Runnable)
Lien vers Docs: postOnAnimation (Java.lang.Runnable)