您可以使用視圖動畫系統,在「檢視區塊」上執行扭曲動畫。補間動畫 使用起點、終點、大小、旋轉以及 動畫的其他常見方面
補間動畫可以執行一系列簡單的轉換 (位置、大小、旋轉、
物件的內容。因此,如果有 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),以及 這個數值會隨著你向下移動而增加
可將某些值 (如 眾多使用者) 指定為相對於物件本身或 父項。請務必根據需求使用適當的格式 (「50」代表 50% 的上層 或「50%」50% 相對於自身情況)。
您可以指派 Interpolator
,決定轉換在一段時間內的套用方式。Android 提供多個內插器子類別
指定各種速度曲線:例如 AccelerateInterpolator
指示轉型,開始放慢速度並加快執行速度每個元素都有一個屬性值
套用於 XML 中
透過這個 XML,系統會將此 XML 儲存為 res/anim/
中的 hyperspace_jump.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 語法、可用標記和屬性,請參閱動畫資源。
注意:無論動畫如何移動或調整大小, 容納動畫的檢視畫面邊界不會自動配合動畫調整。 即便如此,動畫仍會繪製在檢視畫面邊界外,不會遭到裁剪。 不過,如果動畫超過上層檢視畫面的邊界,就會「發生」剪輯。