如何创建自定义插值器以在安卓中应用位移动画

8
我想创建一个自定义插值器来应用平移动画,动画应该通过以下函数进行处理:
  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个回答

6

简短回答:从名称来看,我猜测您的easyIn应该是一个AccelerateInterpolator。

您编写的函数不是插值器可以执行的操作。插值器不关心是缩放、透明度还是平移动画。
文档解释了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%(即90px,200px * 0.45)。
请阅读此文章获取详细信息:

Android动画教程5:更多关于插值器的内容


4

访问 https://matthewlein.com/tools/ceaser

通过操作图表来创建自定义插值器,然后将线下的值复制到下面。

短代码片段和长代码片段:

然后使用。

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

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

非常有用的网站!谢谢分享。 - geggiamarti

2
你可以使用 PathInterpolatorCompat 类。
这个类使用三次贝塞尔曲线方法,需要 4 个参数。
你可以 访问此网站 获取所需的参数或 访问此网站
val interpolatorCompat = PathInterpolatorCompat.create(0.12,1.05f,.98f,-0.82f)
anim.setInterpolator(interpolatorCompat);

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接