文章目录
  1. 1. 一、概述
    1. 1.1. 之前对于android插值器的理解仅仅是表面的,只知道它表示一种变化的趋势/形式,并且只会用简单的加速/减速/加减速插值器,昨天在看一个开源动画源码的时候看到了一个自定义插值器的代码,于是又收获学习到了许多。
  2. 2. 二、系统插值器
  3. 3. 三、系统插值器分析
    1. 3.1. 1、所有的系统插值器都继承自Interpolator类,而Interpolator又实现了TimeInterpolator接口:
    2. 3.2. 2、所以该方法是所有插值器的核心方法,先简单看看系统插值器的该方法:
    3. 3.3. 3、该方法返回的就是一个函数,根据函数我们可以得到函数的图像。这里,斜率应该就是加速度了。
  4. 4. 四、关于自定义插值器
    1. 4.1. 想自定义插值器只需要implements TimeInterpolator就可以拉,然后复写他的getInterpolation(float t);方法。但,难点在于运动函数图像的确定上面。如何精确合理的分析自己的动画的速度的变化规律,然后找到符合该变化规律的函数是一个困难的问题。在这里要重点关注一下。

一、概述

之前对于android插值器的理解仅仅是表面的,只知道它表示一种变化的趋势/形式,并且只会用简单的加速/减速/加减速插值器,昨天在看一个开源动画源码的时候看到了一个自定义插值器的代码,于是又收获学习到了许多。

二、系统插值器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AccelerateDecelerateInterpolator	//加速减速插值器

AccelerateInterpolator //加速插值器

DecelerateInterpolator //减速插值器

LinearInterpolator //线性插值器

OvershootInterpolator //超越插值器-->向前甩一定值后再回到原来位置

AnticipateInterpolator //预先插值器(先这样翻译吧~~)-->开始的时候向后然后向前甩

AnticipateOvershootInterpolator //预先超过插值器-->开始的时候向后然后向前甩一定值后返回最后的值

BounceInterpolator //弹跳插值器-->动画结束的时候弹起

CycleInterpolator //循环插值器-->循环播放特定的次数,速率改变沿着正弦曲线

三、系统插值器分析

1、所有的系统插值器都继承自Interpolator类,而Interpolator又实现了TimeInterpolator接口:

1
2
3
public interface TimeInterpolator {
float getInterpolation(float input);
}

2、所以该方法是所有插值器的核心方法,先简单看看系统插值器的该方法:

1
2
3
4
//AccelerateDecelerateInterpolator
public float getInterpolation(float input) {
return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}
1
2
3
4
//LinearInterpolator
public float getInterpolation(float input) {
return input;
}

3、该方法返回的就是一个函数,根据函数我们可以得到函数的图像。这里,斜率应该就是加速度了。

四、关于自定义插值器

想自定义插值器只需要implements TimeInterpolator就可以拉,然后复写他的getInterpolation(float t);方法。但,难点在于运动函数图像的确定上面。如何精确合理的分析自己的动画的速度的变化规律,然后找到符合该变化规律的函数是一个困难的问题。在这里要重点关注一下。

文章目录
  1. 1. 一、概述
    1. 1.1. 之前对于android插值器的理解仅仅是表面的,只知道它表示一种变化的趋势/形式,并且只会用简单的加速/减速/加减速插值器,昨天在看一个开源动画源码的时候看到了一个自定义插值器的代码,于是又收获学习到了许多。
  2. 2. 二、系统插值器
  3. 3. 三、系统插值器分析
    1. 3.1. 1、所有的系统插值器都继承自Interpolator类,而Interpolator又实现了TimeInterpolator接口:
    2. 3.2. 2、所以该方法是所有插值器的核心方法,先简单看看系统插值器的该方法:
    3. 3.3. 3、该方法返回的就是一个函数,根据函数我们可以得到函数的图像。这里,斜率应该就是加速度了。
  4. 4. 四、关于自定义插值器
    1. 4.1. 想自定义插值器只需要implements TimeInterpolator就可以拉,然后复写他的getInterpolation(float t);方法。但,难点在于运动函数图像的确定上面。如何精确合理的分析自己的动画的速度的变化规律,然后找到符合该变化规律的函数是一个困难的问题。在这里要重点关注一下。