J'ai deux questions distinctes pour atteindre l'objectif indiqué dans le titre.
La première question est: quel est l'état de visibilité d'un com.airbnb.lottie.LottieAnimationView
par défaut dans le XML? J'ai utilisé deux LottieAnimationView différents dans mon XML avec les mêmes caractéristiques:
lottieCatThrowsCup.setVisibility(View.VISIBLE); lottieCatThrowsCup.playAnimation(); lottieCatThrowsCup.addAnimatorListener(this); @Override public void onAnimationEnd(Animator animation) { animation.setVisibility(View.GONE); }
Et tandis que le premier n'est visible que lorsque j'utilise lottieanimationview.playAnimation () code > à partir du code, la seconde est immédiatement visible par défaut au démarrage de l'activité.
Ma deuxième question est due au problème décrit dans la première question. Pour résoudre ce problème, j'ai d'abord ajouté android: visibilité = "part"
à ceux LottieAnimationView
qui étaient immédiatement visibles au démarrage de l'activité, puis j'ai essayé plusieurs morceaux de code pour créer les animations visibles lors de leur lecture et de nouveau invisibles après avoir terminé (le tout sans succès):
Une tentative:
lottieCatThrowsCup.setVisibility(View.VISIBLE); lottieCatThrowsCup.playAnimation(); lottieCatThrowsCup.cancelAnimation();
Une autre tentative: p >
lottieCatThrowsCup.setVisibility(View.VISIBLE); lottieCatThrowsCup.playAnimation(); if(!lottieCatThrowsCup.isAnimating())lottieCatThrowsCup.cancelAnimation();
Troisième tentative:
lottieCatThrowsCup.setVisibility(View.VISIBLE); lottieCatThrowsCup.playAnimation(); if(!(lottieCatThrowsCup.isAnimating())) lottieCatThrowsCup.setVisibility(View.GONE);
Quatrième tentative:
<com.airbnb.lottie.LottieAnimationView android:id="@+id/lottie_animation_ribbon_and_confetti" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:lottie_autoPlay="false" app:lottie_fileName="exploding-ribbon-and-confetti.json" app:lottie_loop="true" app:lottie_repeatCount="1"/> <com.airbnb.lottie.LottieAnimationView android:id="@+id/lottie_cat_throws_cup" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/puntuacionTotal" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/puntosAtrevimiento" app:layout_constraintBottom_toTopOf="@id/textoAtrevimiento" app:lottie_autoPlay="false" app:lottie_fileName="cat_throws_cup.json" app:lottie_loop="true" app:lottie_repeatCount="1" />
À mon l'esprit, la solution la plus simple serait d'utiliser un attribut xml sur com.airbnb.lottie.LottieAnimationView
pour indiquer qu'il ne doit pas être visible par défaut à moins qu'il ne soit lu, mais cela ne semble pas pour en exister un ... Comment résoudriez-vous ça? Merci d'avance.
3 Réponses :
Il existe également d'autres écouteurs
que vous pouvez utiliser pour masquer / afficher la vue Lottie
.
mAddedToCartAnimation.addAnimatorListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { Log.e("Animation:","start"); lottieCatThrowsCup.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animator animation) { Log.e("Animation:","end"); lottieCatThrowsCup.setVisibility(View.GONE); } @Override public void onAnimationCancel(Animator animation) { Log.e("Animation:","cancel"); } @Override public void onAnimationRepeat(Animator animation) { Log.e("Animation:","repeat"); } });
Bonjour ami, cela fonctionne. J'ai cependant une autre question. J'ai de nombreuses animations sur cette même activité, savez-vous s'il existe un moyen d'utiliser un objet d'animation général à l'intérieur de onAnimationStart et onAnimationEnd au lieu de lottieCatThrowsCup afin que, en fonction de l'animation cliquée, onAnimationStart dise quelque chose comme animation.setVisibility (View .VISIBLE)? (bien sûr auparavant, j'aurais utilisé .addAnimationListener (this) pour toutes les animations)
Le problème avec votre solution est que si j'ai de nombreuses animations qui doivent être définies sur VISIBLE dans onAnimationStart, je ne veux pas que toutes soient visibles lorsqu'une seule est lue.
@assensi Avoir un seul objet pour toutes les animations Lottie
peut créer un problème. Chaque animation aura une durée différente. L'objet unique ne fonctionnera pas dans ce cas. Vous devez avoir différents auditeurs pour chaque vue Lottie
que vous avez sur votre écran.
Utilisez ceci:
lottieCatThrowsCup.setVisibility(View.VISIBLE); lottieCatThrowsCup.playAnimation(); lottieCatThrowsCup.addAnimatorListener(this); @Override public void onAnimationEnd(Animator animation) { lottieCatThrowsCup.setVisibility(View.GONE); }
Ajoutez Animator.AnimatorListener
à votre LottieAnimationView
et gérez sa visibilité dans onAnimationStart()
et onAnimationEnd()
finallottieAnimationView.addAnimatorListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
// Make the LottieAnimationView visible here
}
@Override
public void onAnimationEnd(Animator animator) {
// Hide the LottieAnimationView here
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});