У меня проблема с анимацией Android. Когда я нажимаю в первый раз на свой ImageView, мое изображение поворачивается, но когда я нажимаю второй раз на моем ImageView, вращение не работает. Почему это произошло?
Мой метод вращения в коде Java:
private boolean tomIsInvisible = false;
public void eraseTom(View view) {
ImageView tom = findViewById(R.id.tom);
ImageView jerry = findViewById(R.id.jerry);
if (tomIsInvisible) {
tom.animate()
.rotation(3600)
.scaleX(1)
.scaleY(1)
.alpha(1)
.setDuration(3000);
jerry.animate()
.rotation(3600)
.scaleX(0)
.scaleY(0)
.alpha(0)
.setDuration(3000);
tomIsInvisible = false;
} else if (!tomIsInvisible) {
tom.animate()
.rotation(3600)
.scaleX(0)
.scaleY(0)
.alpha(0)
.setDuration(3000);
jerry.animate()
.rotation(3600)
.alpha(1)
.scaleX(1)
.scaleY(1)
.setDuration(3000);
tomIsInvisible = true;
}
}
Другие методы в моем ImageView работают правильно.
Когда вы вызываете rotation(3600)
в первый раз, он анимирует rotation
с 0
на 3600
. (поворот вида по умолчанию 0
). После первой анимации rotation
становится 3600
(ViewPropertyAnimator
изменяет фактическое значение свойства во время анимации). Поэтому, когда вы вызываете rotation(3600)
во второй раз rotation
вашего представления уже 3600
, и вы пытаетесь анимировать его в 3600
. Поэтому визуальных изменений нет. Существует метод ротацияПо, который применяет указанное значение для поворота вида, попробуйте его использовать.
view.animate().rotationBy(3600)
Другое решение состоит в том, чтобы анимировать от 0 до 360 и в конце анимации сбросить вращение вида до 0.
Пожалуйста, поделитесь своим кодом onClick, где вы звоните
eraseTom()
. Том и Джерри друг против друга?