先说结论
插值器核心函数为getInterpolation方法,此方法可转化为一个函数图像,斜率表示方向,大小表示速度,速度对时间的积分表示位移。
证明
1.LinearInterpolator
public float getInterpolation(float input) {
return input;
}
画出图像:
实际效果
LinearInterpolator.gif2.AccelerateDecelerateInterpolator
public float getInterpolation(float input) {
return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}
画出图像:
实际效果
AccelerateDecelerateInterpolator.gif3.CycleInterpolator
public float getInterpolation(float input) {
return (float)(Math.sin(2 * mCycles * Math.PI * input));
}
画出图像:
实际效果
CycleInterpolator.gif4.OvershootInterpolator
public float getInterpolation(float t) {
// _o(t) = t * t * ((tension + 1) * t + tension)
// o(t) = _o(t - 1) + 1
t -= 1.0f;
return t * t * ((mTension + 1) * t + mTension) + 1.0f;
}
画出图像:
实际效果
OvershootInterpolator.gif总结
相信图像画出来之后,聪明的你已经看出了其中的规律,接下来就可以按照自己的想法设计插值器了,快去实现自己的动画效果吧-!
网友评论