Lottie Android - Как играть с позиции на позицию и повторять по диапазону?

Я нашел эту кнопку Lottie Play/Pause, но я не знаю, как показать состояние воспроизведения, когда мой аудиоплеер поставлен на паузу, показать состояние паузы и повторить с анимацией эквалайзера в нем (см. предварительный просмотр лотереи), когда проигрыватель играет. Я прочитал документ, но нет примера для этого случая. У меня нет никаких знаний об After Effect для управления анимацией.


person leegor    schedule 09.01.2020    source источник
comment
Вам нужно будет разделить это на несколько анимаций, чтобы использовать их в реальном мире.   -  person Martin Zeitler    schedule 09.01.2020


Ответы (1)


Согласно анимации Лотти, у него есть кадры, поэтому, манипулируя этими кадрами, вы можете добиться того, что хотите, образец

AnimationView play_pause = findViewById(R.id.play_pause);
play_pause.cancelAnimation();
play_pause.setMinFrame(90);
play_pause.setMaxFrame(175);

Этот код будет повторять вашу анимацию в диапазоне 90-175. Я тестировал его на вашей кнопке Lottie Play/Pause, поэтому при нажатии для остановки вы должны изменить MaxFrame на 210 и установить цикл на 1 после завершения анимации, он остановится в воспроизведении изображения.

И это весь код для достижения чего-то подобного play_pause_animation

Boolean isPlaying = false;
play_pause = findViewById(R.id.play_pause);
play_pause.pauseAnimation();
play_pause.setMinFrame(60);
play_pause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (isPlaying){

                play_pause.removeAllAnimatorListeners();
                play_pause.addAnimatorUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator valueAnimator) {

                        if (valueAnimator.getAnimatedFraction() == 1){

                            play_pause.setMinFrame(60);
                            play_pause.pauseAnimation();

                        }
                    }
                });

                play_pause.setMinFrame(175);
                play_pause.setMaxFrame(210);
                isPlaying = false;
            } else {
                play_pause.setMaxFrame(175);
                play_pause.removeAllUpdateListeners();
                play_pause.addAnimatorListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animator) {

                    }

                    @Override
                    public void onAnimationEnd(Animator animator) {

                    }

                    @Override
                    public void onAnimationCancel(Animator animator) {

                    }

                    @Override
                    public void onAnimationRepeat(Animator animator) {
                        play_pause.setMinFrame(90);
                    }
                });
                play_pause.resumeAnimation();
                isPlaying = true;
            }
        }
    });
person muxammed    schedule 09.01.2020
comment
Это то, что я ищу. Это работает отлично. Спасибо! - person leegor; 09.01.2020
comment
Добро пожаловать)) - person muxammed; 09.01.2020