Android自定义控件入门到精通--Interpolation插值器

本文详细介绍了Android中各种插值器的原理与实现,包括LinearInterpolator、AccelerateInterpolator、DecelerateInterpolator等,通过数学公式解析了它们如何控制动画的加减速效果。此外,还探讨了自定义插值器的方法,帮助开发者深入理解Android动画系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《Android自定义控件入门到精通》文章索引 ☞ https://blog.csdn.net/Jhone_csdn/article/details/118146683

《Android自定义控件入门到精通》所有源码 ☞ https://gitee.com/zengjiangwen/Code

Interpolation插值器

在补间动画的介绍中,我们使用了Interpolator,Interpolator是用于控制动画如何运动的作用。

物体的运动我们知道有匀速运动和变速运动,匀速运动比较简单,物体从A到B运动速度是一样的,变速运动就比较复杂了,有先快后慢,先慢后快等各种情况,
在动画运用中,我们就是通过interpolator来控制(描述)动画的运动过程。

我们用t来表示当前动画运动的时间,t∈[01],用y来表示当前运动距离的百分比,y∈[01]

举例:

匀速运动,y=t

整个运动过程我们用y、t坐标系画出来应该就是一条直线

在这里插入图片描述

反过来,给出一条y、t曲线/直线,就能知道这个物体从起点到终点的运动过程,线上点的斜率反应当前的速度,斜率越大,当前速度越大,Interpolator就是用来定义这条直线的算法的

Anroid中的Interpolator实现了TimeInterpolator接口

public interface TimeInterpolator {
   
    float getInterpolation(float input);
}

getInterpolation() 描述的就是运动的公式(算法),自定义插值器只要在这里描述运动就可以了

  • input为运动开始到结束的时间值,用0表示开始的时间,1表示结束的时间,即我们上面说的时间t
  • return的值为物体所在的距离,用0表示开始的位置,1表示终点的位置,即我们上面说的y,在运动过程中,物体可能会运动到超过终点的位置后返回终点,也可能先往起点相反的位置运动后再朝终点的位置运动,也就是y∈[0,1],但y在运动过程中,可以小于0,也可以大于1

Android已提供的Interpolation:

在这里插入图片描述

LinearInterpolator

//LinearInterpolator.java
@Override
public float getInterpolation(float input) {
   
    return input;
}

算法 :y=t

在这里插入图片描述

结论:LinearInterpolator为匀速运动

AccelerateInterpolator

public AccelerateInterpolator() {
   
    mFactor = 1.0f;
    mDoubleFactor = 2.0;
}

public AccelerateInterpolator(float factor) {
   
    mFactor = factor;
    mDoubleFactor = 2 * mFactor;
}

factor:可以理解为运动算法效果的影响因子

@Override
public float getInterpolation(float input) {
   
    if (mFactor == 1.0f) {
   
        return input * input;
    } else {
   
        return (float)Math.pow(input, mDoubleFactor);
    }
}

算法 y=t^2f (f=factor)

在这里插入图片描述

结论:

  • 当factory>0.5f(factory=0.5f,为直线匀速运动)时,物体做加速运动
  • 当factory<0.5f时,物体先加速后减速运动

AccelerateDecelerateInterpolator

@Override
public float getInterpolation(float input) {
   
    return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) +
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一鱼浅游

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值