Java 如何创建自定义插值器以在android中应用平移动画

Java 如何创建自定义插值器以在android中应用平移动画,java,android,animation,translate-animation,interpolation,Java,Android,Animation,Translate Animation,Interpolation,我想创建一个自定义插值以应用平移动画,其中动画应通过以下功能: public static float easeIn(float t,float b , float c, float d) { return c*(t/=d)*t + b; } 其中: t: current time b: start value c: change in value d: duration 我找到了一个可以实现缩放动画的方法,其中如果只取一个参数: imp

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

  public static float easeIn(float t,float b , float c, float d) {
                return c*(t/=d)*t + b;
        }
其中:

t: current time
b: start value
c: change in value
d: duration 
我找到了一个可以实现缩放动画的方法,其中如果只取一个参数:

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

如何使用上述函数创建插值以进行翻译。

简短回答:从名称来看,我想你的easyIn应该是一个加速器插值器

你写的函数不是插值器能做的。插值器不关心它是缩放、Alpha还是平移图像。
文档对插值器getInterpolation的解释如下: 介于0和1.0之间的值,表示动画中的当前点,其中0表示开始,1.0表示结束

插值器提供了一个从经过的时间(相对)映射到动画进度的函数。你可以用%来想象,getInterpolation(xy)会告诉你
“如果传递了总持续时间的xy%,则应传递总动画的百分比是多少?”

以LinearInterpolator为例。实现如下所示:

public float getInterpolation(float t) {
        return t
}
示例:使用LinearInterpolator:
在45%(0.45)的时间之后,应通过45%(返回0.45)的动画,即90px(200px*0.45)

有关详细信息,请阅读以下内容:

访问 通过操纵图表而不是复制线下的值来创建自定义插值器

短长代码片段:

比使用

Interpolator mInterpolator = PathInterpolatorCompat.create(1.000f, 0.000f, 1.000f, 1.030f)

使用复制的值创建自定义插值器

可以使用路径插值器Compat

这使用三次贝塞尔方法,需要4个参数

您可以获取所需的参数或


非常有用的网站!谢谢分享
val interpolatorCompat = PathInterpolatorCompat.create(0.12,1.05f,.98f,-0.82f)
anim.setInterpolator(interpolatorCompat);