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

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

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

6 Solutions collect form web for “Реверсирование анимации”

Нет, к сожалению, вы не можете сделать это с помощью объекта 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 запустите обратную анимацию.

  • Продолжительность анимации строки UITableView и обратный вызов завершения
  • Как создать анимацию «Пожалуйста, подождите, загрузка ...» с помощью jQuery?
  • Анимировать обновление ProgressBar в Android
  • CSS3 Непрерывная анимация вращения (точно так же, как загрузка солнечных часов)
  • Перемещение объектов и таймеров
  • Анимация для expandableListView
  • Как создать импульсный эффект с использованием -webkit-animation - наружные кольца
  • Как я могу использовать frameworks анимации внутри canvasа?
  • Android-анимация не повторяется
  • Устаревшая анимация SMIL SVG заменена эффектами CSS или веб-анимации (наведите курсор, щелкните)
  • Как сделать плавное rotation изображения в Android?
  • Давайте будем гением компьютера.