Android Interpolator(插值器)

1、概述
插值器定义如何计算动画中的特定值作为时间的函数。例如,指定动画在整个动画中线性发生,这意味着动画在整个时间内均匀移动,或者指定动画以使用非线性时间,例如,在开始或结束时使用加速或减速动画。
Android中提供的Interpolator主要以下几个:

资源ID 说明
AccelerateDecelerateInterpolator   @android:anim/accelerate_decelerate_interpolator   变化率开始和结束缓慢但在中间加速。  
AccelerateInterpolator   @android:anim/accelerate_interpolator   变化率开始缓慢然后加速。  
AnticipateInterpolator   @android:anim/anticipate_interpolator   变化开始向后然后向前飞行  
AnticipateOvershootInterpolator   @android:anim/anticipate_overshoot_interpolator   变化开始向后然后向前飞行并超过目标值,最后返回到最终值。  
BaseInterpolator     插值器扩展的抽象类  
BounceInterpolator   @android:anim/bounce_interpolator   更改在结束时反弹  
CycleInterpolator   @android:anim/cycle_interpolator   重复动画指定的周期数  
DecelerateInterpolator   @android:anim/decelerate_interpolator   变化率快速开始然后减速  
LinearInterpolator   @android:anim/linear_interpolator   变化率是恒定的  
OvershootInterpolator   @android:anim/overshoot_interpolator   变化向前晃动并超过最后一个值然后返回  

2、具体使用
xml使用

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

代码使用

Interpolator interpolator = new AccelerateDecelerateInterpolator(); animation.setInterpolator(interpolator);

3、自定义插值器
要想创建一个属于你自己的插值器类,你必须实现 Interpolator 接口。这个接口只定义了一个方法:

public float getInterpolation(float input)

定义Interpolator,定义一个动画以最快的速度启动,然后减速运动至一半,最后加速运动至结束。

public class TestInterpolator implements Interpolator { @Override public float getInterpolation(float input) { float x = 2.0f * input - 1.0f; return 0.5f * (x * x * x + 1.0f); } }

自定义插值器是不能在xml使用,直接在代码使用

Interpolator interpolator = new TestInterpolator(); animation.setInterpolator(interpolator);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzsywx.html