View Animation(視圖動畫)

原文:Android Developers——View Animation

視圖動畫

你可以利用視圖動畫系統爲你的View製作補間動畫,即根據起點、終點、尺寸變化、旋轉角度等條件計算出的動畫。
補間動畫可以在你的View上添加許多效果(位移、縮放、旋轉、透明度變化等)。比如說,如果你有一個TextView對象,你可以移動、旋轉、縮放它,如果它有背景圖,那麼背景圖也會跟着變化。animation包提供了製作補間動畫可能用到的所有類。
補間動畫是由XML文件中或是代碼中的一系列的動畫指令定義的。我們推薦使用XML文件,因爲它的可讀性、複用性、易修改性比代碼更強,和我們推薦使用佈局文件來設計UI同樣道理。下面的例子中,我們使用了XML。如果想知道如何在代碼中定義,可以參考AnimationSet類以及其他Animation的子類。
動畫指令定義了我們想要發生的變化、變化發生的時間以及變化會持續多久。這些變化可以是同時發生的,也可以是按照順序發生的。例如,你可以讓一個TextView的內容從左邊移動到右邊,然後旋轉180度,也可以讓平移和旋轉同時發生。每種變化都有一系列的參數(旋轉角度、初始位置與終點位置等),也有一些參數是所有變化共用的(開始時間、持續時間等)。如果想要動畫同時發生,那麼就將開始時間設置爲同一個時間點,如果想要動畫按順序發生,那麼就根據動畫的持續時間計算出每個動畫的開始時間。
視圖動畫文件應當被放在你的Android工程的res/anim/文件夾中。文件必須有一個單獨的根標籤,可以是<alpha>,<scale>,<rotate>,<translate>,一個插值器(intepolator),也可以是一個<set>。所有動畫默認是同時的,如果要它們按次序,必須設置startOffset屬性。
下面的動畫讓一個View先收縮,然後同時收縮旋轉。

<set android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false" />
        <rotate
           android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400" />
    </set>
</set>

屏幕的原點在左上角(這個例子中沒用到),並且當你向右或下移動時座標數字增大。
像pivotX這樣的參數,可以和對象本身相關,也可以和對象的父佈局相關,因此你要注意使用合適的格式(“50”代表父佈局的50%,“50%”代表自己的50%)。
你可以通過Intepolator來確定動畫的變化趨勢。Android系統提供了許多的Interpolator子類,例如AccelerateInterpolator,它讓變化在開始時慢並且逐漸加速。每個Intepolator都有一個可以在XML中使用的屬性值。
假設我們有一個儲存在res/anim文件夾下的,名爲hyperspace_jump.xml的動畫文件,我們可以這麼在代碼中使用:

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

關於視圖動畫的更多信息:https://developer.android.google.cn/guide/topics/resources/animation-resource.html#View

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章