1疮茄、概述
插值器定義如何計算動畫中的特定值作為時間的函數(shù)擎浴。例如员咽,指定動畫在整個動畫中線性發(fā)生,這意味著動畫在整個時間內(nèi)均勻移動退客,或者指定動畫以使用非線性時間骏融,例如,在開始或結(jié)束時使用加速或減速動畫萌狂。
Android中提供的Interpolator主要以下幾個:
類 | 資源ID | 說明 |
---|---|---|
AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator | 變化率開始和結(jié)束緩慢但在中間加速档玻。 |
AccelerateInterpolator | @android:anim/accelerate_interpolator | 變化率開始緩慢然后加速。 |
AnticipateInterpolator | @android:anim/anticipate_interpolator | 變化開始向后然后向前飛行 |
AnticipateOvershootInterpolator | @android:anim/anticipate_overshoot_interpolator | 變化開始向后然后向前飛行并超過目標值茫藏,最后返回到最終值误趴。 |
BaseInterpolator | 插值器擴展的抽象類 | |
BounceInterpolator | @android:anim/bounce_interpolator | 更改在結(jié)束時反彈 |
CycleInterpolator | @android:anim/cycle_interpolator | 重復(fù)動畫指定的周期數(shù) |
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务傲、自定義插值器
要想創(chuàng)建一個屬于你自己的插值器類凉当,你必須實現(xiàn) Interpolator 接口。這個接口只定義了一個方法:
public float getInterpolation(float input)
定義Interpolator售葡,定義一個動畫以最快的速度啟動看杭,然后減速運動至一半,最后加速運動至結(jié)束挟伙。
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);