Проблема с повторным использованием объектов ViewPropertyAnimator - PullRequest
0 голосов
/ 22 сентября 2018

Использование простых 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() используется только тогда, когда мы хотим немедленно, синхроннозапускать анимацию, а не оставлять ее начинать, когда она будет готова, поэтому объявление анимаций в конструкторе означает, что они запускаются одновременно.

Пока что проблемы, с которыми я сталкиваюсь при таком подходе:

  1. ViewPropertyAnimator, хранимый в переменных, всегда является последним, построенным с использованием animate(), своего рода встроенного «кэша».
  2. Анимация фактически начинается сразу же, без необходимости start()!
  3. Не могу найти способ временно приостановить анимацию, пока я не вызову start().
вручную.
...