Android tween 動畫 XML 梳理

前言:

Tween動畫是展示出旋轉、漸變、移動、縮放的這麼一種轉換過程,即補間動畫。Tween動畫有兩種定義方式:XML形式,編碼形式。此次主要來梳理XML的方式配置動畫 android

(1)XML定義動畫,按照動畫定義語法完成XML,置於/res/anim目錄下,文件名做爲資源ID引用函數

(2)XML文件中必須有一個根元素,能夠是<alpha>、<scale>、<translate>、<rotate>中的任意一個,也能夠是<set>來管理一個由前面幾個元素組成的動畫集合。優化

(3)<set>是一個動畫容器,管理多個動畫的羣組,與之相對應的Java對象是AnimationSet。動畫

簡單配置

1、alpha (漸變)

<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 -->
 

2、rotate (旋轉)

<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"/>

3、scale (縮放)

<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"/>

4、translate(位移)

<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"/>
 

補充:

<set>

<set>是一個動畫容器,管理多個動畫的羣組,與之相對應的Java對象是AnimationSet。
它有兩個屬性,
android:interpolator表明一個插值器資源,能夠引用系統自帶插值器資源,也能夠用自定義插值器資源,默認值是勻速插值器;稍後我會對插值器作出詳細講解。
android:shareInterpolator表明<set>裏面的多個動畫是否要共享插值器,默認值爲true,即共享插值器,若是設置爲false,那麼<set>的插值器就再也不起做用,咱們要在每一個動畫中加入插值器。
示例:

<?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

 

插值器

首先要了解爲何須要插值器,由於在補間動畫中,咱們通常只定義關鍵幀(首幀或尾幀),而後由系統自動生成中間幀,生成中間幀的這個過程能夠成爲「插值」。 插值器定義了動畫變化的速率,提供不一樣的函數定義變化值相對於時間的變化規則,能夠定義各類各樣的非線性變化函數,好比加速、減速等。下面是幾種常見的插 值器:

E}5IZLCBE84QCM652[TLW{F

插值器使用法:

<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」
…/>

自定義插值器

若是以上的修改系統插值器屬性仍沒法知足須要,能夠自定義插值器。

相關文章
相關標籤/搜索