Android ObjectAnimation запускается только один раз - PullRequest
4 голосов
/ 15 марта 2011

Я использую API ObjectAnimator (android.animation.ObjectAnimator), чтобы анимировать кнопку после ее нажатия (v - это кнопка):

ObjectAnimator animator = ObjectAnimator.ofFloat(v, "rotationY", 360f);
animator.setDuration(5000);
animator.start();

Когда я проверяю это на эмуляторе, он работает дляпервый щелчок (кнопка вращается).Но когда я нажимаю кнопку еще раз (фрагмент не разрушается и т. Д. После первого щелчка), я не вижу никакой анимации на эмуляторе (эмулятор не самый быстрый, но через 5 секунд я должен что-то увидеть).

Нужно ли что-то разрушать / закрывать после первой анимации или чего мне не хватает?У кого-нибудь есть подсказка или можно воспроизвести это?

Заранее спасибо, Мартин

Ответы [ 2 ]

12 голосов
/ 15 марта 2011

Во второй раз вы попытаетесь анимировать от 360.0f до 360.0f.Измените ваш вызов ofFloat () на:

ObjectAnimator.ofFloat(v, "rotationY", 0.0f, 360.0f)
9 голосов
/ 05 апреля 2011

Чтобы уточнить ответ Ромена, результатом конструктора фабрики с одним значением является анимация, которая будет запускаться от текущего значения до значения, указанного в параметрах. В вашем случае объект имел значение от 0, чтобы начать с анимированного (в первый раз) до значения 360. Во второй раз он запустил анимацию с текущего значения (360) до указанного значения (360). Не много анимации.

Исправление как указано выше: жестко запишите начальное и конечное значения для аниматора. В качестве альтернативы, вы можете сбросить значение обратно на 0, когда анимация завершится, реализовав метод AnimatorListener.onAnimationEnd и сбросив его после завершения анимации:

    animator.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            v.setRotationY(0);
        }
    });
...