android 动画系列:插值器-Interpolator

本文介绍了Android动画中的插值器(Interpolator)概念,阐述了其在动画效果中的作用,即根据输入的时间点计算出另一个时间点以实现不同的动画效果。内容包括插值器的数学原理,如一元二次方程式的应用,以及Android系统提供的预定义插值器类型,如加速、减速等。

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

参考资料:
http://www.lightskystreet.com/categories/Android/Android%E5%8A%A8%E7%94%BB/

只为做个记录:代码下载
关键代码:

import android.animation.TimeInterpolator;

/**
 * Created by baiyuanwei on 16/12/29.
 * 动画过程1:0 -> 1;
 * 动画过程2: 1 -> 0.7 -> 1;
 * 动画过程3: 1 -> 0.9 -> 1;
 */

public class MenuInterpolator implements TimeInterpolator {

    private final float ROTATION_TIME = 0.4f;
    private final float FIRST_BOUNCE_TIME = 0.3f;
    private final float SECOND_BOUNCE_TIME = 0.3f;

    @Override
    public float getInterpolation(float v) {
        //动画过程1:0 -> 1;
        if (v < ROTATION_TIME) {
            return rotationValue(v);
        }
        //动画过程2: 1 -> 0.7 -> 1;
        else if (v < ROTATION_TIME + FIRST_BOUNCE_TIME) {
            return firstBounceValue(v);
        }
        //动画过程3: 1 -> 0.9 -> 1;
        else {
            return secondBounceValue(v);
        }
    }

    private float rotationValue(float v) {
        //6.25 = 1/ROTATION_TIME^2,点(0.4,1)、(0,0)
        return 6.25f * v * v;
    }

    private float firstBounceValue(float v) {
        //二次方程求解,点(0.4,1)、(0.7,1)、(0.55,0.7)
        return 13.333f * v * v - 14.6663f * v + 4.7332325f;
    }

    private float secondBounceValue(float v) {
        //二次方程求解,点(0.7,1)、(0.85,0.9)、(1,1)
        return 4.444f * v * v - 7.5548f * v + 4.11079f;
    }
}

备注:
1、插值器的意义:就是当要执行input的时间时,通过Interpolator计算返回另外一个时间点,让系统执行另外一个时间的动画效果。
2、插值器中的函数方程式都是通过数学方法计算出来的,如案例中的一元二次方程式,都是通过两个点的坐标计算出来的;当然也可以是二元三次方程式。
3、输入的范围是[0,1], 输出的范围可以超过1,也可以小于0;
4、android 也自带了一些插值器:加速、减速、先加后减等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值