Реверсирование анимации

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

Есть ли способ изменить анимацию в андроиде, не перекодируя его и не изменяя параметры?

Нет, к сожалению, вы не можете сделать это с помощью объекта Animation. Но вы можете имитировать его с помощью интерполятора, который будет инвертировать анимацию:

 package com.example.android; import android.view.animation.Interpolator; public class ReverseInterpolator implements Interpolator { @Override public float getInterpolation(float paramFloat) { return Math.abs(paramFloat -1f); } } 

Затем в вашей анимации вы можете установить новый интерполятор:

 myAnimation.setInterpolator(new ReverseInterpolator()); 

Если вы используете Object или ValueAnimator для анимации представления, вы можете просто сделать

 ValueAnimator myAnimator = new ValueAnimator(); myAnimator.reverse() 

Документацию можно найти здесь .

Основываясь на концепции pcans , вы можете отменить любой интерполятор, а не только линейный.

 class ReverseInterpolator implements Interpolator{ private final Interpolator delegate; public ReverseInterpolator(Interpolator delegate){ this.delegate = delegate; } public ReverseInterpolator(){ this(new LinearInterpolator()); } @Override public float getInterpolation(float input) { return 1 - delegate.getInterpolation(input); } } 

Применение

 ReverseInterpolator reverseInterpolator = new ReverseInterpolator(new AccelerateInterpolator()) myAnimation.setInterpolator(reverseInterpolator); 

У меня аналогичный подход к pcans buts немного отличается. Он берет Interpolator и будет эффективно передавать значения, которые будут такими же, как использование переданного в Interpolator а затем в режиме REVERSE. Сохраняет вам возможность думать о багги-реализациях Animation.REVERSE на Android. См. Здесь код

 public class ReverseInterpolator implements Interpolator { private final Interpolator mInterpolator; public ReverseInterpolator(Interpolator interpolator){ mInterpolator = interpolator; } @Override public float getInterpolation(float input) { return mInterpolator.getInterpolation(reverseInput(input)); } /** * Map value so 0-0.5 = 0-1 and 0.5-1 = 1-0 */ private float reverseInput(float input){ if(input <= 0.5) return input*2; else return Math.abs(input-1)*2; } } 

Вы можете заставить код запомнить исходную позицию и конечную позицию. И пусть ваш код динамически получает эти значения при запуске анимации.

Если вы используете анимацию из xml, то простой способ – сделать такую ​​же обратную анимацию для оригинальной анимации. Добавьте Animation.AnimationListener в оригинальную анимацию и в метод onAnimationEnd запустите обратную анимацию.

  • Как перемещать изображение (анимацию)?
  • CSS переход авто высота не работает
  • Как мне оживить View.setVisibility (GONE)
  • Как сделать плавное rotation изображения в Android?
  • Как анимировать путь на canvasе - андроид
  • Простая анимационная петля для CSS - Fading In & Out «Загрузка» текста
  • как я могу использовать анимацию в cocos2d?
  • Android View исчезает, когда выходит за пределы родителя
  • дрожание / вобуляция анимации просмотра в android
  • Почему частота кадров в WPF нерегулярна и не ограничена для мониторинга обновления?
  • Начать операцию с анимации
  • Interesting Posts

    Показать вкладки в полноэкранном режиме Chrome?

    Есть ли возможность ограничить использование памяти mongodb?

    Получение размера клавиатуры из userInfo в Swift

    Сколько одновременных запросов AJAX (XmlHttpRequest) разрешено в популярных браузерах?

    Альтернатива Logmein, которая быстро входит в систему, защищена и дешево?

    Как удалить файл с именем «-p» из bash?

    Что такое ошибка «Неверная инструкция: 4» и почему «-mmacosx-version-min = 10.x» исправить?

    HttpContext.Current.User.Identity.Name всегда string.Empty

    Работа с маневрами DOM в AngularJS

    Как использовать паспорт с express и socket.io?

    Как маршалировать без пространства имен?

    AngularJS: $ q -> отложенный API-код вещей (жизненный цикл) И кто вызывает дайджест?

    Линейный цикл регрессии для каждой независимой переменной отдельно от зависимой

    почему размер памяти стека настолько ограничен?

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

    Давайте будем гением компьютера.