web-dev-qa-db-fra.com

Comment savoir quand l'animation de lottie est terminée?

J'ai un fragment, voici la méthode onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    mView = inflater.inflate(R.layout.fragment_added_to_cart_anim, container, false);
    ButterKnife.bind(this, mView);

    mAddedToCartAnimation.setAnimation("checked_done_.json");
    mAddedToCartAnimation.loop(false);
    mAddedToCartAnimation.playAnimation();

    // Remove fragment when animation is finished.


    return mView;
}

Je dois supprimer le fragment à l'aide de getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit(); lorsque l'animation lottie est terminée. Si je comprends bien, lorsque la méthode isAnimating() lottie renvoie false, l'animation est terminée et puisque dans ma configuration, l'animation ne boucle pas, c'est à ce moment-là que je devrais supprimer le fragment actuel. Mais je ne peux pas simplement utiliser une instruction if car lorsqu'elle est exécutée, l'animation peut toujours être en cours.

J'ai besoin d'un moyen de supprimer le fragment à la fin de l'animation du lottie, comment faire?

13
Tom Finet

Ce code fonctionne pour moi:

mAddedToCartAnimation.addAnimatorListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
            Log.e("Animation:","start");
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            Log.e("Animation:","end");
            //Your code for remove the fragment
            try {
                getActivity().getSupportFragmentManager()
                      .beginTransaction().remove(this).commit();
            } catch(Exception ex) {
                ex.toString();
            }
        }

        @Override
        public void onAnimationCancel(Animator animation) {
            Log.e("Animation:","cancel");
        }

        @Override
        public void onAnimationRepeat(Animator animation) {
            Log.e("Animation:","repeat");
        }
    });

J'espère que cela résoudra votre problème :)

26
Chefes