Tween動畫是展示出旋轉、漸變、移動、縮放的這麼一種轉換過程,即補間動畫。Tween動畫有兩種定義方式:XML形式,編碼形式。此次主要來梳理XML的方式配置動畫 android
(1)XML定義動畫,按照動畫定義語法完成XML,置於/res/anim目錄下,文件名做爲資源ID引用函數
(2)XML文件中必須有一個根元素,能夠是<alpha>、<scale>、<translate>、<rotate>中的任意一個,也能夠是<set>來管理一個由前面幾個元素組成的動畫集合。優化
(3)<set>是一個動畫容器,管理多個動畫的羣組,與之相對應的Java對象是AnimationSet。動畫
<alpha>是漸變更畫,能夠實現淡入和淡出的效果,與之對應的Java對象是AlphaAnimation。
android:fromAlpha屬性表明起始alpha值,浮點值,範圍在0.0和1.0之間,分別表明透明和徹底不透明,
android:toAlpha屬性表明結尾alpha值,浮點值,範圍也在0.0和1.0之間。 編碼
<?xml version="1.0" encoding="utf-8"?>
<!-- 表示透明度從0.1到1.0,時長爲3000ms。-->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromAlpha="0.1"
android:toAlpha="1.0"/><!-- 表示透明度從0.1到1.0,時長爲3000ms -->
<rotate>是旋轉動畫,與之對應的Java對象是RotateAnimation。
android:fromDegrees屬性表明起始角度,浮點值,單位:度;
android:toDegrees屬性表明結尾角度,浮點值,單位:度;
code
android:pivotX屬性表明旋轉中心的X座標值,
android:pivotY屬性表明旋轉中心的Y座標值,
這兩個屬性也有三種表示方式,數字方式表明相對於自身左邊緣的像素值,num%方式表明相對於自身左邊緣或頂邊緣的百分比,num%p方式表明相對於父容器的左邊緣或頂邊緣的百分比。
另外,在動畫中,若是咱們添加了android:fillAfter=」true」後,這個動畫執行完以後保持最後的狀態;android:duration=」integer」表明動畫持續的時間,單位爲毫秒。xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromDegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360"/>
<scale>是縮放動畫,能夠實現動態調控件尺寸的效果,與之對應的Java對象是ScaleAnimation。
android:fromXScale屬性表明起始的X方向上相對自身的縮放比例,浮點值,好比1.0表明自身無變化,0.5表明起始時縮小一倍,2.0表明放大一倍;
android:toXScale屬性表明結尾的X方向上相對自身的縮放比例,浮點值;
android:fromYScale屬性表明起始的Y方向上相對自身的縮放比例,浮點值;
android:toYScale屬性表明結尾的Y方向上相對自身的縮放比例,浮點值;
android:pivotX屬性表明縮放的中軸點X座標,浮點值,
android:pivotY屬性表明縮放的中軸點Y座標,浮點值,對於這兩個屬性,若是咱們想表示中軸點爲圖像的中心,咱們能夠把兩個屬性值定義成0.5或者50%。對象
android:fillAfter 屬性 當設置爲true ,該動畫轉化在動畫結束後被應用
android:interpolator 指定一個動畫的插入器,共三種:
(1)accelerate_decelerate_interpolator 加速-減速 動畫插入器
(2)accelerate_interpolator 加速-動畫插入器
(3)decelerate_interpolator 減速- 動畫插入器
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fillAfter="false"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0"/>
<translate>是位移動畫,表明一個水平、垂直的位移。與之對應的Java對象是TranslateAnimation。
android:fromXDelta屬性表明起始X方向的位置,
android:toXDelta表明結尾X方向上的位置,
android:fromYScale屬性表明起始Y方向上的位置,
android:toYDelta屬性表明結尾Y方向上的位置,
以 上四個屬性都支持三種表示方式:浮點數、num%、num%p;若是以浮點數字表示,表明相對自身原始位置的像素值;若是以num%表示,表明相對於本身 的百分比,好比toXDelta定義爲100%就表示在X方向上移動本身的1倍距離;若是以num%p表示,表明相對於父類組件的百分比。 blog
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromXDelta="10"
android:fromYDelta="10"
android:toXDelta="100"
android:toYDelta="100"/>
示例:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@[package:]anim/interpolator_resource"
android:shareInterpolator=["true" | "false"] >
<alpha
android:fromAlpha="float"
android:toAlpha="float" />
<scale
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float" />
<translate
android:fromX="float"
android:toX="float"
android:fromY="float"
android:toY="float" />
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float" />
</set>ip
首先要了解爲何須要插值器,由於在補間動畫中,咱們通常只定義關鍵幀(首幀或尾幀),而後由系統自動生成中間幀,生成中間幀的這個過程能夠成爲「插值」。 插值器定義了動畫變化的速率,提供不一樣的函數定義變化值相對於時間的變化規則,能夠定義各類各樣的非線性變化函數,好比加速、減速等。下面是幾種常見的插 值器:
插值器使用法:
<set android:interpolator=」@android:anim/accelerate_interpolator」>
…
</set>
個性化插值器:
若是系統提供的插值器不能知足須要,能夠經過修改插值器的屬性優化,好比修改AnticipateInterpolator的加速速率,調整CycleInterpolator的循環次數等。
常見的插值器可調整的屬性:
<accelerateDecelerateInterpolator> 無
<accelerateInterpolator> android:factor 浮點值,加速速率,默認爲1
<anticipateInterploator> android:tension 浮點值,起始點後退的張力、拉力數,默認爲2
<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」
…/>
自定義插值器
若是以上的修改系統插值器屬性仍沒法知足須要,能夠自定義插值器。