OvershootInterpolator
的源码如下:
package android.view.animation;
public class OvershootInterpolator extends BaseInterpolator {
private final float mTension;
public OvershootInterpolator() {
mTension = 2.0f;
}
public OvershootInterpolator(float tension) {
mTension = tension;
}
public float getInterpolation(float t) {
t -= 1.0f;
return t * t * ((mTension + 1) * t + mTension) + 1.0f;
}
}
从float getInterpolation(float input)
的实现,可以知道,这个可以用数学函数表达为y=(x-1)^2*((n+1)*(x-1)+n)+1,x∈[0,1],n∈[-∞,+∞],n是常数
在Matlab的命令窗口中输入如下命令:
x = linspace(0,1,100);
y = (x - 1).*(x - 1).*(3.*(x - 1) + 2) + 1;
plot(x, y);
title('y=(x-1)^2*(3(x-1) + 2) + 1');
grid on
得到下面的曲线图:
改变上面的n,得到下面的曲线图:
从图中可以看出,当构造参数传入的等于0的时候,就是加速的,当参数大于0的时候,会超过预期值,但会被拉回来,最终停在预期值,就像橡皮筋一样。