自定义Interpolator

系统提供的这些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,动画在前半段是线性变化到指定值,后半段也是线性的,而且又变换回初始值去了。