倒转animation

我有一个ImageView,它被添加到布局时获得animation。 当它被删除,我想扭转相同的animation。

有没有办法在Android中反转animation而不重新编码它并颠倒参数?

不,可悲的是你不能用animation对象来做。 但是你可以使用一个内插器来模拟它,这个内插器会反转这个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); } } 

然后在你的animation中,你可以设置你的新插补器:

 myAnimation.setInterpolator(new ReverseInterpolator()); 

如果您使用Object或ValueAnimator来为视图设置animation效果,那么您可以简单地进行操作

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

文档可以在这里find。

基于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但略有不同。 它需要一个Interpolator并且将有效地传递出与通常使用的Interpolator相同的值,然后在反向模式下。 保存你不必考虑Android的Animation.REVERSE的错误实现。 看到这里的代码

 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; } } 

您可以使代码记住原始位置和结束位置。 当触发animation时让你的代码dynamic获取这些值。