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

У меня есть фрагмент, вот метод 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 the animation is finished.

    return mView;

}

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

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


person Tom Finet    schedule 12.09.2017    source источник


Ответы (2)


У меня работает этот код:

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

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

person Chefes    schedule 12.09.2017
comment
Как могло бы выглядеть решение для C # Android Xamarin? - person Aiko West; 03.04.2018
comment
@Chefes: в конце первой анимации я попытался запустить вторую анимацию. но вторая анимация продолжает зацикливаться после завершения первого раунда. есть ли другой способ, которым может быть достигнута цепная анимация? - person ASN; 16.04.2018
comment
@K.Dexter вы нашли решение для Xamarin Android? - person Gold.strike; 20.06.2019
comment
@ Gold.strike не прости - person Aiko West; 24.06.2019
comment
Примечание: если вы сделали видимость представления Lottie невидимым или пропавшим, прослушиватель анимации не будет запущен. - person SagaRock101; 20.11.2020
comment
у этого есть эквивалентный код для angular? - person Titus; 11.03.2021
comment
У меня нет опыта работы с Lottie и Angular, но, возможно, полный обратный вызов может вам помочь CC @Titus npmjs.com/package/ngx-lottie#api - person Chefes; 16.03.2021

Код 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?) {
            }

        })
person Rajeev Shetty    schedule 20.05.2020