系统提供的这些Interpolator
已经包含了最常见的情形了,如果不满足您的要求,就可以自定义一个。
自定义Interpolator
就是实现Interpolator
接口中的public float getInterpolation(float input)
方法, 最重要的是设计一个合理的算法,这通常就是要精心设计一个数学函数,你需要对常见的数学函数了如指掌,通过数学函数的坐标变换、分段等方法组合出一个复杂的函数, 或者是利用函数拟合的方法,拟合出一个函数来。
下面是一个自定义Interpolator
示例:
package com.leleliu008.aimation;
import android.view.animation.Interpolator;
public class MyInterpolator implements Interpolator {
@Override
public float getInterpolation(float input) {
return (float) 0.5f - Math.abs(input - 0.5f);
}
}
从float getInterpolation(float input)
的实现,可以知道,这个可以用数学函数表达为y=0.5-abs(x-0.5),x∈[0,1]
, 这是一个以x=0.5
为对称轴的对称曲线。
在Matlab的命令窗口中输入如下命令:
x = linspace(0,1,100);
y = 0.5-abs(x - 0.5);
plot(x, y);
title('y=0.5-abs(x - 0.5)');
grid on
得到下面的曲线图:
如果应用了该Interpolator
,动画在前半段是线性变化到指定值,后半段也是线性的,而且又变换回初始值去了。