插值器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 | 在上一個基礎上超出終點一小步再回到終點 |
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 | 快速到達終點並超出一小步最後回到終點 |
插值器使用法:優化
<set android:interpolator="@android :anim/accelerate_interpolator">
...
</set>動畫
個性化插值器:spa
若是系統提供的插值器不能知足須要,能夠經過修改插值器的屬性優化,好比修改AnticipateInterpolator的加速速率,調整CycleInterpolator的循環次數等。.net
常見的插值器可調整的屬性:orm
<accelerateDecelerateInterpolator> 無xml
<accelerateInterpolator> android:factor 浮點值,加速速率,默認爲1對象
<anticipateInterploator> android:tension 浮點值,起始點後退的張力、拉力數,默認爲2ip
<anticipateOvershootInterpolator> android:tension 同上 android:extraTension 浮點值,拉力的倍數,默認爲1.5(2 * 1.5)
<bounceInterpolator> 無
<cycleInterplolator> android:cycles 整數值,循環的個數,默認爲1
<decelerateInterpolator> android:factor 浮點值,減速的速率,默認爲1
<linearInterpolator> 無
<overshootInterpolator> 浮點值,超出終點後的張力、拉力,默認爲2
使用修改插值器屬性法
在/res/anim下建立一個XML文件(以修改overshootInterpolator屬性爲例)命名爲my_overshoot_interpolator.xml
<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:tension="7.0"/>
引用到自定義的插值器
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/my_overshoot_interpolator"
.../>
自定義插值器
若是以上的修改系統插值器屬性仍沒法知足須要,能夠自定義插值器。