倒转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获取这些值。