CycleInterpolator

CycleInterpolator的源码如下:

package android.view.animation;

public class CycleInterpolator extends BaseInterpolator {

    private float mCycles;

    public CycleInterpolator(float cycles) {
        mCycles = cycles;
    }

    public float getInterpolation(float input) {
        return (float)(Math.sin(2 * mCycles * Math.PI * input));
    }
}

float getInterpolation(float input)的实现,可以知道,这个可以用数学函数表达为y=sin(2nπx),x∈[0,1],n∈[-∞,+∞],n是常数

Matlab的命令窗口中输入如下命令:

x = linspace(0,1,100);
y = sin(2*pi*x);
plot(x,y);
title('y=sin(2πx)')

得到下面的曲线图:

本来y=sin(2nπx)[-∞,+∞]上是周期性曲线,周期为n,但是我们现在x∈[0,1], 所以,构造的时候传入的参数是很有讲究的,通过改变这个参数可以实现很多效果。