如何创建自定义插值器以在 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 标签进行排序?
当按下 menuItem 以在 android 中显示用于列表视图的自定义适配器时,应用程序崩溃
如何将使用 Mask Rcnn 在自定义对象检测上创建蒙版图像的 Keras 模型转换为 CoreML 模型以在 iOS 应用程序中使用?