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

Posted

技术标签:

【中文标题】如何创建自定义插值器以在 android 中应用翻译动画【英文标题】:How to create custom Interpolator to apply translate animation in android 【发布时间】:2014-01-27 07:37:38 【问题描述】:

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

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

如何在 interpolate 中创建以使用上述函数进行翻译。

【问题讨论】:

【参考方案1】:

简答:从名字上我猜你的 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% (return 0.45) 的动画应该通过,即 90px (200px*0.45)

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

Android Animations Tutorial 5: More on Interpolators

【讨论】:

【参考方案2】:

访问https://matthewlein.com/tools/ceaser 通过操作图表创建自定义插值器,而不是复制线下方的值

代码 sn-ps,短手和长手:

比使用

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

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

【讨论】:

非常有帮助的网站!谢谢分享【参考方案3】:

您可以使用 PathInterpolatorCompat 类。

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

您可以this site 获取所需的参数或this site

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

【讨论】:

以上是关于如何创建自定义插值器以在 android 中应用翻译动画的主要内容,如果未能解决你的问题,请参考以下文章

如何编写自定义排序器以在 UI 中按名称对 springdoc swagger 标签进行排序?

Select2 自定义匹配器以在组标题匹配时保持选项打开

Android自定义View(9) 《动画 插值器简介》

当按下 menuItem 以在 android 中显示用于列表视图的自定义适配器时,应用程序崩溃

如何将使用 Mask Rcnn 在自定义对象检测上创建蒙版图像的 Keras 模型转换为 CoreML 模型以在 iOS 应用程序中使用?

如何提供分类器以在 Tensorflow 上进行训练