檢視動畫

你可以使用檢視動畫系統,在 View 上執行補間動畫。補間動畫會使用動畫開始點、結束點、大小、旋轉和其他常見元素等資訊計算動畫。

補間動畫可對 View 物件的內容執行一系列的簡易轉換 (位置、大小、旋轉和透明度)。因此,如果您有 TextView 物件,可以移動、旋轉、放大或縮小文字。如果圖片有背景圖片,將連同文字一併轉換。animation package 提供補間動畫中使用的所有類別。

一系列動畫指示定義補間動畫,以 XML 或 Android 程式碼定義。與定義版面配置一樣,建議您使用 XML 檔案,因為相較於以硬式編碼方式編寫動畫,這種檔案更容易閱讀、重複使用及切換。在下方範例中,我們使用 XML。(如要進一步瞭解如何在應用程式的程式碼中定義動畫,而非在 XML 中定義,請參閱 AnimationSet 類別和其他 Animation 子類別)。

動畫指示定義了您想要發生的轉換、轉換發生的時間,以及套用轉換所需的時間。轉換可以依序或同時進行,例如,您可以將 TextView 的內容從左向右移動,然後旋轉 180 度,或者讓文字同時移動及旋轉。每個轉換都會使用一組特定參數 (例如大小變更的開始大小和結束尺寸、旋轉的起始角度和結束角度等),以及一組通用的參數 (例如開始時間和時間長度)。如要同時發生多項轉換,請為這些轉換作業提供相同的開始時間;若要依序進行,請計算開始時間加上前一項轉換的持續時間。

動畫 XML 檔案位於 Android 專案的 res/anim/ 目錄中。檔案必須具備單一根元素:這可以是單一 <alpha><scale><translate><rotate>、內插器元素,或包含這些元素群組 (可能包含另一個 <set>) 的 <set> 元素。根據預設,所有動畫指示都會同時套用。如要依序執行這些動作,您必須指定 startOffset 屬性,如以下範例所示。

以下其中一個 ApiDemos 的 XML 會用於延伸,然後同時旋轉並旋轉 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>

螢幕座標 (本例未使用) 為 (0,0) 的左上角,您可以向下和向右增加。

部分值 (例如 PivotX) 可以根據物件本身或相對於父項而指定。請務必根據所需類型選用適當格式 (「50」代表父項 50%,「50%」代表相對於其本身 50%)。

您可以指派 Interpolator 來判斷轉換在一段時間內的套用方式。Android 包含多個內插器子類別,可用於指定各種速度曲線:舉例來說,AccelerateInterpolator 會指示轉換作業開始緩慢並加快速度。每個元素都有可套用至 XML 中的屬性值。

將此 XML 儲存為專案 res/anim/ 目錄中的 hyperspace_jump.xml 後,下列程式碼會參照該 XML,並將其套用至版面配置中的 ImageView 物件。

Kotlin

AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation ->
    findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation)
}

Java

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

除了 startAnimation() 以外,您也可以使用 Animation.setStartTime() 定義動畫的開始時間,然後使用 View.setAnimation() 將動畫指派給檢視畫面。

如要進一步瞭解 XML 語法、可用的標記和屬性,請參閱「動畫資源」。

注意:無論動畫的移動或大小方式為何,包含動畫的檢視畫面的邊界都不會配合動畫自動調整。即使如此,動畫仍會繪製在檢視畫面的邊界外,也不會裁剪。但是,如果動畫超過父項檢視畫面的邊界,就會發生裁剪。