Использование простых View
animate()
работает очень хорошо, однако, когда я присваиваю возвращенную ViewPropertyAnimator
переменной и пытаюсь вызвать start()
для нее, похоже, не работает вообще.
Что я пробовал и работает:
view.animate()
.alpha(0)
.setDuration(400)
.start();
Что я пробовал и не работает:
public CustomViewConstructor() {
ViewPropertyAnimator animation = view.animate()
.alpha(0)
.setDuration(400);
// problem #1: Starts immediately here
ViewPropertyAnimator animation2 = view.animate()
.alpha(0.5)
.setDuration(100);
}
customViewCallback() {
animation.start();
// problem #2: animation2 will be cached and used instead
}
РЕДАКТИРОВАТЬ:
Iубедился, что обратный вызов вызван, что означает, что start()
действительно вызывается, но я не вижу результатов вообще.
У меня есть причина прибегнуть к такому разделению, потому что я хочу отменить анимацию в другое время,Также будут приветствоваться любые другие способы отмены анимации по ссылке.
EDIT:
Я использовал две разные анимации для одного и того же представления в его конструкторе, поменял местами анимацию скрытия и показал места анимациигде анимация показа объявлена последней и получила другой вывод.Вид застревает в последнем кадре анимации показа, что означает, что ранее он также застревал в последнем кадре анимации скрытия.Это все еще показывает, что start()
не запускает анимацию!
EDIT:
Согласно документации, получается, что start()
используется только тогда, когда мы хотим немедленно, синхроннозапускать анимацию, а не оставлять ее начинать, когда она будет готова, поэтому объявление анимаций в конструкторе означает, что они запускаются одновременно.
Пока что проблемы, с которыми я сталкиваюсь при таком подходе:
- ViewPropertyAnimator, хранимый в переменных, всегда является последним, построенным с использованием
animate()
, своего рода встроенного «кэша». - Анимация фактически начинается сразу же, без необходимости
start()
! - Не могу найти способ временно приостановить анимацию, пока я не вызову
start()
.
вручную.