鍍金池/ 教程/ Android/ Interpolator 插值器
聯(lián)合動畫的 XML 實現(xiàn)與使用示例
Interpolator 插值器
高級進(jìn)階(二)
ObjectAnimator 基本使用
ValueAnimator 基本使用
alpha、scale、translate、rotate、set 的 xml 屬性及用法
PropertyValuesHolder 與 Keyframe
layoutAnimation 與 gridLayoutAnimation
自定義控件三部曲之動畫篇(十三)——實現(xiàn)ListView Item進(jìn)入動畫
自定義控件三部曲之動畫篇(十二)——animateLayoutChanges與LayoutTransition
高級進(jìn)階(一)
代碼生成 alpha、scale、translate、rotate、set 及插值器動畫
聯(lián)合動畫的代碼實現(xiàn)

Interpolator 插值器

一、概述

Interpolator 屬性是 Animation 類的一個 XML 屬性,所以 alpha、scale、rotate、translate、set 都會繼承得到這個屬性。Interpolator 被譯為插值器,其實我不大能從字面上理解為什么會這樣譯,其實他是一個指定動畫如何變化的東東,跟 PS 里的動作有點類似:隨便拿來一張圖片,應(yīng)用一個動作,圖片就會指定變化。

Interpolator 的系統(tǒng)值有下面幾個:

http://wiki.jikexueyuan.com/project/android-animation/images/6.png" alt="" />

意義如下:

  • AccelerateDecelerateInterpolator 在動畫開始與介紹的地方速率改變比較慢,在中間的時候加速
  • AccelerateInterpolator 在動畫開始的地方速率改變比較慢,然后開始加速
  • AnticipateInterpolator 開始的時候向后然后向前甩
  • AnticipateOvershootInterpolator 開始的時候向后然后向前甩一定值后返回最后的值
  • BounceInterpolator 動畫結(jié)束的時候彈起
  • CycleInterpolator 動畫循環(huán)播放特定的次數(shù),速率改變沿著正弦曲線
  • DecelerateInterpolator 在動畫開始的地方快然后慢
  • LinearInterpolator 以常量速率改變
  • OvershootInterpolator 向前甩一定值后再回到原來位置

下面看看各個標(biāo)簽在應(yīng)用上面的每個插值器后會運動軌跡會怎樣。

二、scale 標(biāo)簽

下面先看看 Scale 標(biāo)簽應(yīng)用插值器后,都會變成什么樣。

先看下 XML 代碼:(從控件中心點,從 0 放大到 1.4 倍,保持結(jié)束時的狀態(tài))

<?xml version="1.0" encoding="utf-8"?>  
<scale xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
    android:fromXScale="0.0"  
    android:toXScale="1.4"  
    android:fromYScale="0.0"  
    android:toYScale="1.4"  
    android:pivotX="50%"  
    android:pivotY="50%"  
    android:duration="700"   
    android:fillAfter="true"  
/>  

下面一個個看看,每個 xml 值對應(yīng)的 scale 動畫是怎樣的。

http://wiki.jikexueyuan.com/project/android-animation/images/15.gif" alt="" />

AccelerateInterpolator 在動畫開始的地方速率改變比較慢,然后開始加速 http://wiki.jikexueyuan.com/project/android-animation/images/16.gif" alt="" />

DecelerateInterpolator 在動畫開始的地方快然后慢 http://wiki.jikexueyuan.com/project/android-animation/images/17.gif" alt="" />

AnticipateInterpolator 開始的時候向后然后向前甩 http://wiki.jikexueyuan.com/project/android-animation/images/18.gif" alt="" />

AnticipateOvershootInterpolator 開始的時候向后然后向前甩一定值后返回最后的值 http://wiki.jikexueyuan.com/project/android-animation/images/19.gif" alt="" />

BounceInterpolator 動畫結(jié)束的時候彈起 http://wiki.jikexueyuan.com/project/android-animation/images/20.gif" alt="" />

CycleInterpolator 動畫循環(huán)播放特定的次數(shù),速率改變沿著正弦曲線 http://wiki.jikexueyuan.com/project/android-animation/images/21.gif" alt="" />

LinearInterpolator 以常量速率改變 http://wiki.jikexueyuan.com/project/android-animation/images/22.gif" alt="" />

OvershootInterpolator 向前甩一定值后再回到原來位置 http://wiki.jikexueyuan.com/project/android-animation/images/23.gif" alt="" />

三、rotate 標(biāo)簽

下面先看看 rotate 標(biāo)簽應(yīng)用插值器后,都會變成什么樣。

先看下 XML 代碼:(從控件中心點,從 0 放大到 1.4 倍,保持結(jié)束時的狀態(tài))

[html] view plain <?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="700"
android:fillAfter="true"
/>
AccelerateDecelerateInterpolator 在動畫開始與介紹的地方速率改變比較慢,在中間的時候加速

http://wiki.jikexueyuan.com/project/android-animation/images/24.gif" alt="" />

AccelerateInterpolator 在動畫開始的地方速率改變比較慢,然后開始加速 http://wiki.jikexueyuan.com/project/android-animation/images/25.gif" alt="" />

DecelerateInterpolator 在動畫開始的地方快然后慢 http://wiki.jikexueyuan.com/project/android-animation/images/26.gif" alt="" />

AnticipateInterpolator 開始的時候向后然后向前甩 http://wiki.jikexueyuan.com/project/android-animation/images/27.gif" alt="" />

AnticipateOvershootInterpolator 開始的時候向后然后向前甩一定值后返回最后的值 http://wiki.jikexueyuan.com/project/android-animation/images/28.gif" alt="" />

BounceInterpolator 動畫結(jié)束的時候彈起 http://wiki.jikexueyuan.com/project/android-animation/images/29.gif" alt="" />

CycleInterpolator 動畫循環(huán)播放特定的次數(shù),速率改變沿著正弦曲線 http://wiki.jikexueyuan.com/project/android-animation/images/30.gif" alt="" />

LinearInterpolator 以常量速率改變 http://wiki.jikexueyuan.com/project/android-animation/images/31.gif" alt="" />

OvershootInterpolator 向前甩一定值后再回到原來位置 http://wiki.jikexueyuan.com/project/android-animation/images/32.gif" alt="" />

四、alpha 標(biāo)簽

下面先看看 alpha 標(biāo)簽應(yīng)用插值器后,都會變成什么樣。

將透明度從 0 變成 1.0,使用不同的插值器看看有什么不同(因為只是透明度的變化,所以基本看不出來有什么不同) [html] view plain <?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="3000"
android:fillAfter="true"
/>
AccelerateDecelerateInterpolator 在動畫開始與介紹的地方速率改變比較慢,在中間的時候加速

http://wiki.jikexueyuan.com/project/android-animation/images/33.gif" alt="" />

AccelerateInterpolator 在動畫開始的地方速率改變比較慢,然后開始加速 http://wiki.jikexueyuan.com/project/android-animation/images/34.gif" alt="" />

DecelerateInterpolator 在動畫開始的地方快然后慢 http://wiki.jikexueyuan.com/project/android-animation/images/35.gif" alt="" />

AnticipateInterpolator 開始的時候向后然后向前甩 http://wiki.jikexueyuan.com/project/android-animation/images/36.gif" alt="" />

AnticipateOvershootInterpolator 開始的時候向后然后向前甩一定值后返回最后的值 http://wiki.jikexueyuan.com/project/android-animation/images/37.gif" alt="" />

BounceInterpolator 動畫結(jié)束的時候彈起 http://wiki.jikexueyuan.com/project/android-animation/images/38.gif" alt="" />

CycleInterpolator 動畫循環(huán)播放特定的次數(shù),速率改變沿著正弦曲線 http://wiki.jikexueyuan.com/project/android-animation/images/39.gif" alt="" />

LinearInterpolator 以常量速率改變 http://wiki.jikexueyuan.com/project/android-animation/images/40.gif" alt="" />

OvershootInterpolator 向前甩一定值后再回到原來位置 http://wiki.jikexueyuan.com/project/android-animation/images/41.gif" alt="" />

五、translate 標(biāo)簽

下面先看看 translate 標(biāo)簽應(yīng)用插值器后,都會變成什么樣。

把控件從(0,0)平移到(-200,-200)的位置,保持結(jié)束時狀態(tài)不變,使用不同插值器。 [html] view plain <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXDelta="0"
android:toXDelta="-200"
android:fromYDelta="0"
android:toYDelta="-200"
android:duration="2000"
android:fillAfter="true"
/>
AccelerateDecelerateInterpolator 在動畫開始與介紹的地方速率改變比較慢,在中間的時候加速

http://wiki.jikexueyuan.com/project/android-animation/images/42.gif" alt="" />

AccelerateInterpolator 在動畫開始的地方速率改變比較慢,然后開始加速 http://wiki.jikexueyuan.com/project/android-animation/images/43.gif" alt="" />

DecelerateInterpolator 在動畫開始的地方快然后慢 http://wiki.jikexueyuan.com/project/android-animation/images/44.gif" alt="" />

AnticipateInterpolator 開始的時候向后然后向前甩 http://wiki.jikexueyuan.com/project/android-animation/images/45.gif" alt="" />

AnticipateOvershootInterpolator 開始的時候向后然后向前甩一定值后返回最后的值 http://wiki.jikexueyuan.com/project/android-animation/images/46.gif" alt="" />

BounceInterpolator 動畫結(jié)束的時候彈起 http://wiki.jikexueyuan.com/project/android-animation/images/47.gif" alt="" />

CycleInterpolator 動畫循環(huán)播放特定的次數(shù),速率改變沿著正弦曲線 http://wiki.jikexueyuan.com/project/android-animation/images/48.gif" alt="" />

LinearInterpolator 以常量速率改變 http://wiki.jikexueyuan.com/project/android-animation/images/49.gif" alt="" />

OvershootInterpolator 向前甩一定值后再回到原來位置 http://wiki.jikexueyuan.com/project/android-animation/images/50.gif" alt="" />

這篇文章到這就結(jié)束了,因為動畫比較多,可能看的會有點暈,下面我會給出上面效果所對應(yīng)的源碼,大家可以運行一下。

如果我的文章能幫到您,請加關(guān)注,謝謝。

源碼下載地址:http://download.csdn.net/detail/harvic880925/8038491

請大家尊重原創(chuàng)者版權(quán),轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/harvic880925/article/details/40049763 謝謝!