Как вернуть вид в исходное состояние после использования аниматоров для анимации некоторых его свойств?

Я использую аниматоры (ObjectAnimator), чтобы анимировать несколько свойств (масштаб, поворот) представления.

Целевое представление корректно анимируется, когда для него установлены ObjectAnimators.

Но есть дополнительное требование, чтобы через некоторое время просмотреть исходную позицию (сбросить).

Я попытался отменить () аниматор, но он только отменяет анимацию и не сбрасывает вид.

Возможное решение: создание другого аниматора, который работает прямо напротив исходного аниматора.

Есть ли другой способ сбросить его?

5 ответов

Посмотрите на решение, которое я придумала, поскольку у меня была похожая проблема с анимациями внутри представлений в представлении переработчика, поэтому мне пришлось искать способ их сброса:

Попытка сброса значений из Property Animator для использования в представлении переработчика

Хорошие новости в Android O, они будут лучше поддерживаться

Я столкнулся с той же проблемой, потому что я анимирую использование вида ViewPropertyAnimator, addView() а такжеremoveView() снова и снова, чтобы не создавать новое представление, но представление может быть показано один раз, когда вы удаляете представление, вы снова вызываете addview(), оно не показывается, но вы видите, что видимость надлежащего вида видна и animationListener также будет называться. это странно.

У меня была такая же проблема с моими взглядами. поэтому я столкнулся с этой проблемой с помощью этого трюка. Итак, мы предполагаем, что у нас есть представление, которое применяет анимацию после нажатия на нее.

      
          viewLayout.arrow_back.setOnClickListener {arrow ->
            arrow.animate().rotationXBy(50F) // this is a just simple anim not so usefull
                .start()
            arrow.isEnabled = false
        }

Надеюсь, это кому-то поможет.

Оба ObjectAnimator.cancel()а также ObjectAnimator.end()не отменяйте эффекты, которые анимация оказала на анимированный объект, а просто отмените ее выполнение в точке, в которой были вызваны методы (дополнительные сведения см . в документации ValueAnimator ).

Теперь я могу придумать три основных способа выполнить то, что вы хотели:

  1. Поместите слушателя на ObjectAnimator, и когда / OnAnimationCancelвызывается, вручную сбрасывает свойства представления.
  2. Если свойства представления, которые вы хотите сбросить, соответствуют свойствам, указанным в XML-файле, вы можете повторно наполнить его. Для получения более подробной информации ознакомьтесь с этим ответом .
  3. ИспользоватьObjectAnimator.reverse()метод, чтобы отменить выполнение анимации, эффективно сбрасывая свойства представления. Предпочтительно, чтобы вы вызывали start reverse, когда анимация заканчивается, поэтому вам, вероятно, нужно поместить прослушиватель на аниматор и проверить, когда OnAnimationEndс анимтором на реверс называется.

Вы хотите остановить анимацию? Если это так, позвоните clearAnimation() удалить анимацию из представлений, которые вы назвали startAnimation();Если вы имеете в виду восстановление первоначального вида после завершения анимации, всегда setFillAfter(false); к анимации.

Другие вопросы по тегам