Как узнать, когда закончится анимация лотереи?

У меня есть фрагмент, вот метод 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;
}

Мне нужно удалить фрагмент с помощью getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit(); когда закончится анимация лотереи. Если я правильно понимаю, когда isAnimating() Метод lottie возвращает false, анимация закончилась, и, поскольку в моей конфигурации анимация не зацикливается, я должен удалить текущий фрагмент. Но я не могу просто использовать оператор if, поскольку, когда он выполняется, анимация может продолжаться.

Мне нужен способ удалить фрагмент, когда заканчивается анимация лотереи, как мне это сделать?

3 ответа

Решение

Этот код работает для меня:

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");
        }
    });

Я надеюсь, что это решит вашу проблему:)

Код Kotlin для анимации завершен:

successAnimation.addAnimatorListener(object : Animator.AnimatorListener{
            override fun onAnimationRepeat(animation: Animator?) {
            }

            override fun onAnimationEnd(animation: Animator?) {
                //Add your code here for animation end
            }

            override fun onAnimationCancel(animation: Animator?) {
            }

            override fun onAnimationStart(animation: Animator?) {
            }

        })

В Котлине можно так:

      val lotWelcome=findViewById<LottieAnimationView>(R.id.lot_1) 
   
lotWelcome.addAnimatorListener(object : Animator.AnimatorListener {
       override fun onAnimationStart(animation: Animator) {
           Log.e("Animation:", "start")
       }
   override fun onAnimationEnd(animation: Animator) {
       Log.e("Animation:", "end")
       //Ex: here the layout is removed!
       firstScreen.visibility= View.GONE
   }

   override fun onAnimationCancel(animation: Animator) {
       Log.e("Animation:", "cancel")
   }

   override fun onAnimationRepeat(animation: Animator) {
       Log.e("Animation:", "repeat")
   }

  })

Кстати, оригинальный документ можно посмотреть здесь: https://airbnb.io/lottie/#/android

Другие вопросы по тегам