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

时间:2014-01-08 23:14:47

标签: 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 

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

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

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

3 个答案:

答案 0 :(得分: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
}

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

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

Android Animations Tutorial 5: More on Interpolators

答案 1 :(得分:0)

访问https://matthewlein.com/tools/ceaser 通过操纵图表而不是复制

下方的值来创建自定义插值器

简写和简写的代码段:

比使用

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

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

答案 2 :(得分:0)

您可以使用 PathInterpolatorCompat 类。

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

你可以this site获取需要的参数或this site

val interpolatorCompat = PathInterpolatorCompat.create(0.12,1.05f,.98f,-0.82f)
anim.setInterpolator(interpolatorCompat);

enter image description here