J'ai une animation de fondu dans une vue (qui est à l'intérieur d'un fragment), et chaque fois que l'animation se produit, une fois qu'elle est terminée, la vue se redessine à nouveau. J'ai trouvé un travail autour de view.SetVisibility(View.GONE)
. Mais il n'attend pas que l'animation se termine. Je voudrais exécuter ce code setVisibility uniquement après la fin de l'animation. Quelle est la meilleure façon de le faire?
Vous pouvez ajouter un écouteur d'animation à votre objet d'animation, comme
anim.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationEnd(Animation arg0) {
}
});
Fonctionnellement identique à la réponse acceptée mais de manière beaucoup plus concise:
/* Add/Remove any animation parameter */
theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() {
@Override
public void run() {
theView.setVisibility(View.GONE);
}
});
Prendre plaisir :)
Prenez simplement votre objet d'animation et ajoutez-lui un écouteur d'animation. Voici l'exemple de code:
rotateAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
**// WRITE HERE WHATEVER YOU WANT ON THE COMPLETION OF THE ANIMATION**
}
});
Vous pouvez également y parvenir avec Animation.setFillAfter
Exemple pour Kotlin
var fadeOutImage = findViewById<ImageView>(R.id.fade_out_Image)
val fadeOutAnimation = R.anim.fade_out_animation
val animation = AnimationUtils.loadAnimation(this, fadeOutAnimation)
fadeOutImage.startAnimation(animation)
animation.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(p0: Animation?) {
// not implemented
}
override fun onAnimationRepeat(p0: Animation?) {
// not implemented
}
override fun onAnimationEnd(p0: Animation?) {
fadeOutImage.visibility = View.INVISIBLE
}
})