動畫資源可定義兩種動畫類型的其中一種:
- 屬性動畫
- 使用
Animator
修改特定時間範圍內的物件屬性值以建立動畫。 - 檢視動畫
-
您可以使用檢視動畫架構的動畫類型有兩種:
- 補間動畫:使用
Animation
執行單一圖片的一系列轉換,藉此建立動畫 - 影格動畫:或使用
AnimationDrawable
依序顯示一系列圖片以建立動畫。
- 補間動畫:使用
屬性動畫
在 XML 中定義的動畫,可在特定的時間範圍內修改目標物件的屬性,例如背景顏色或 Alpha 值。
- 檔案位置:
res/animator/filename.xml
檔案名稱會做資源 ID 使用。- 編譯資源資料類型:
ValueAnimator
、ObjectAnimator
或AnimatorSet
的資源指標。- 資源參照:
-
Java 或 Kotlin 程式碼:
R.animator.filename
XML:@[package:]animator/filename
- 語法:
-
<set android:ordering=["together" | "sequentially"]> <objectAnimator android:propertyName="string" android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["restart" | "reverse"] android:valueType=["intType" | "floatType"]/> <animator android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["restart" | "reverse"] android:valueType=["intType" | "floatType"]/> <set> ... </set> </set>
檔案必須有單一根元素:
<set>
、<objectAnimator>
或<valueAnimator>
。您可以在<set>
元素內分組動畫元素,包括其他<set>
元素。 - 元素:
- 例如:
-
XML 檔案儲存在 res/animator/property_animator.xml
:<set android:ordering="sequentially"> <set> <objectAnimator android:propertyName="x" android:duration="500" android:valueTo="400" android:valueType="intType"/> <objectAnimator android:propertyName="y" android:duration="500" android:valueTo="300" android:valueType="intType"/> </set> <objectAnimator android:propertyName="alpha" android:duration="500" android:valueTo="1f"/> </set>
如要執行此動畫,您必須將程式碼中的 XML 資源加載至
AnimatorSet
物件,然後設定所有動畫的目標物件,再開始動畫組合。為便利起見,呼叫setTarget()
會設定AnimatorSet
的所有子項目標目標物件。以下程式碼說明如何執行這項作業:Kotlin
val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator) .apply { setTarget(myObject) start() }
Java
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.animator.property_animator); set.setTarget(myObject); set.start();
- 另請參閱:
檢視動畫
檢視動畫架構支援補間動畫和畫面動畫,且兩種都可在 XML 中宣告。以下章節說明如何使用這兩種方法。補間動畫
在 XML 中定義的動畫,可執行圖像旋轉、淡出、移動和延展等轉場效果。
- 檔案位置:
res/anim/filename.xml
系統會把檔案名稱當做資源 ID。- 編譯資源資料類型:
Animation
的資源指標。- 資源參照:
-
Java:
R.anim.filename
XML:@[package:]anim/filename
- 語法:
-
<?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:fromXDelta="float" android:toXDelta="float" android:fromYDelta="float" android:toYDelta="float" /> <rotate android:fromDegrees="float" android:toDegrees="float" android:pivotX="float" android:pivotY="float" /> <set> ... </set> </set>
檔案必須具備單一根元素:
<alpha>
、<scale>
、<translate>
、<rotate>
,或包含其他動畫元素群組 (甚至是巢狀<set>
元素) 的<set>
元素。 - 元素:
- 例如:
-
XML 檔案儲存在 res/anim/hyperspace_jump.xml
:<set xmlns:android="http://schemas.android.com/apk/res/android" 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/accelerate_interpolator" android:startOffset="700"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="400" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="400" /> </set> </set>
此應用程式程式碼會將動畫套用至
ImageView
並開始動畫:Kotlin
val image: ImageView = findViewById(R.id.image) val hyperspaceJump: Animation = AnimationUtils.
loadAnimation
(this, R.anim.hyperspace_jump) image.startAnimation
(hyperspaceJump)Java
ImageView image = (ImageView) findViewById(R.id.image); Animation hyperspaceJump = AnimationUtils.
loadAnimation
(this, R.anim.hyperspace_jump); image.startAnimation
(hyperspaceJump); - 另請參閱:
內插器
內插器是 XML 中定義的動畫修飾符,會影響動畫中的變更速率。這可允許現有動畫效果加速、減速、重複、跳出等。
內插器會套用至有 android:interpolator
屬性的動畫元素,值是內插器資源的參照。
Android 中提供的所有內插器都是 Interpolator
類別的子類別。對於每個內插器類別而言,Android 包含一個公開資源,可供您使用 android:interpolator
屬性套用內插器至動畫。下表列出每個內插器要使用的資源:
內插器類別 | 資源 ID |
---|---|
AccelerateDecelerateInterpolator |
@android:anim/accelerate_decelerate_interpolator |
AccelerateInterpolator |
@android:anim/accelerate_interpolator |
AnticipateInterpolator |
@android:anim/anticipate_interpolator |
AnticipateOvershootInterpolator |
@android:anim/anticipate_overshoot_interpolator |
BounceInterpolator |
@android:anim/bounce_interpolator |
CycleInterpolator |
@android:anim/cycle_interpolator |
DecelerateInterpolator |
@android:anim/decelerate_interpolator |
LinearInterpolator |
@android:anim/linear_interpolator |
OvershootInterpolator |
@android:anim/overshoot_interpolator |
如何使用 android:interpolator
屬性儲存下列其中一個值:
<set android:interpolator="@android:anim/accelerate_interpolator"> ... </set>
自訂內插器
如果您不想要使用平台提供的內插器 (如上表所列),您可以使用修改的屬性建立自訂內插器資源。舉例來說,您可以調整 AnticipateInterpolator
的加速器速率,或是調整 CycleInterpolator
的週期數量。如要執行此操作,您必須在 XML 檔案中建立自己的內插器資源。
- 檔案位置:
res/anim/filename.xml
系統會把檔案名稱當做資源 ID。- 編譯資源資料類型:
- 對應內插器物件的資源指標。
- 資源參照:
-
XML:
@[package:]anim/filename
- 語法:
-
<?xml version="1.0" encoding="utf-8"?> <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android" android:attribute_name="value" />
如果沒有套用任何屬性,內插器就會以與平台提供的內插器屬性完全相同的方式運作 (如上表所列)。
- 元素:
- 請注意,在 XML 中定義時,每個
Interpolator
實作的名稱都會以小寫開頭。 - 例如:
-
XML 檔案儲存在
res/anim/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" />
此動畫 XML 將套用內插器:
<scale xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim/my_overshoot_interpolator" android:fromXScale="1.0" android:toXScale="3.0" android:fromYScale="1.0" android:toYScale="3.0" android:pivotX="50%" android:pivotY="50%" android:duration="700" />
畫面動畫
在 XML 中定義的動畫,會依序顯示圖片序列 (例如電影)。
- 檔案位置:
res/drawable/filename.xml
系統會把檔案名稱當做資源 ID。- 編譯資源資料類型:
AnimationDrawable
的資源指標。- 資源參照:
-
Java:
R.drawable.filename
XML:@[package:]drawable.filename
- 語法:
-
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot=["true" | "false"] > <item android:drawable="@[package:]drawable/drawable_resource_name" android:duration="integer" /> </animation-list>
- 元素:
- 例如:
-
- XML 檔案儲存在
res/drawable/rocket_thrust.xml
: -
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/rocket_thrust1" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust2" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /> </animation-list>
- 此應用程式程式碼會將動畫設為檢視畫面的背景,然後播放動畫:
-
Kotlin
val rocketImage: ImageView = findViewById(R.id.rocket_image) rocketImage.
setBackgroundResource
(R.drawable.rocket_thrust) val rocketAnimation = rocketImage.background
if (rocketAnimation isAnimatable
) { rocketAnimation.start()
}Java
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.
setBackgroundResource
(R.drawable.rocket_thrust); rocketAnimation = rocketImage.getBackground()
; if (rocketAnimation instanceofAnimatable
) { ((Animatable)rocketAnimation).start()
; }
- XML 檔案儲存在
- 另請參閱: