如何创建自定义插值器以在android中应用翻译动画

Adh*_*ham 3 java animation android interpolation translate-animation

我想创建一个自定义插值来应用平移动画,其中动画应该通过以下函数:

  public static float easeIn(float t,float b , float c, float d) {
                return c*(t/=d)*t + b;
        }
Run Code Online (Sandbox Code Playgroud)

其中:

t: current time
b: start value
c: change in value
d: duration 
Run Code Online (Sandbox Code Playgroud)

我找到了一个实现缩放动画,如果只采用一个参数:

import android.view.animation.Interpolator;

public class MyInterpolator implements Interpolator {
    public MyInterpolator() {
    }

    public float getInterpolation(float t) {
        float x = 2.0f * t - 1.0f;
        return 0.5f * (x * x * x + 1.0f);
    }
}
Run Code Online (Sandbox Code Playgroud)

如何使用上面的函数创建插值来进行翻译.

Chr*_*ort 5

简答:从名称我想你的easyIn应该是AccelerateInterpolator

您编写的函数不是插补器可以执行的操作.插值器不关心它是Scale-,Alpha-还是TranslateAnimation.
文档解释了Interpolator getInterpolation如下:0到1.0之间的值表示动画中的当前点,其中0表示开始,1.0表示结束

内插器提供从经过的时间(相对)映射到动画进度的功能.您可以想象它以%为单位,getInterpolation(xy)将告诉您
"如果通过总持续时间的xy%,应该传递多少%的动画?"

以LinearInterpolator为例.实现将如下所示:

public float getInterpolation(float t) {
        return t
}
Run Code Online (Sandbox Code Playgroud)

示例:使用LinearInterpolator从0px动画到200px:
在45%(0.45)的时间后,应传递45%(返回0.45)的动画,即90px(200px*0.45)

请阅读此内容以获取详细信息:

Android动画教程5:有关插值器的更多信息