משאבי אנימציה

משאב אנימציה יכול להגדיר אחד משני סוגים של אנימציות:

אנימציה של נכס
יצירת אנימציה על ידי שינוי ערכי המאפיין של אובייקט במשך תקופה מוגדרת עם Animator.
הצגת האנימציה

יש שני סוגים של אנימציות שניתן לבצע באמצעות מסגרת האנימציה של התצוגה:

אנימציה של הנכס

אנימציה שמוגדרת ב-XML שמשנה את המאפיינים של אובייקט היעד, כמו צבע רקע או ערך אלפא, לאורך פרק זמן מוגדר.

מיקום הקובץ:

res/animator/filename.xmlבצבע
שם הקובץ משמש כמזהה המשאב.
סוג נתונים של משאב מקומפל:
מצביע משאב ל-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>.

רכיבים:
<set>
קונטיינר שמכיל רכיבי אנימציה אחרים (<objectAnimator>, <valueAnimator>, או רכיבי <set> אחרים). מייצג AnimatorSet.

אפשר לציין תגי <set> מקוננים כדי אנימציות קבוצתיות. כל <set> יכול להגדיר ordering.

מאפיינים:

android:ordering
מילת מפתח. קובעים את סדר ההפעלה של האנימציות בקבוצה הזו.
ערךתיאור
sequentiallyהפעלת אנימציות בסדרה הזו ברצף.
together (ברירת מחדל)הפעלת האנימציות בקבוצה הזו בו-זמנית.
<objectAnimator>
יצירת אנימציה של מאפיין ספציפי של אובייקט לאורך פרק זמן ספציפי. מייצג ObjectAnimator.

מאפיינים:

android:propertyName
מחרוזת. חובה. מאפיין האובייקט להנפשה, מצוין באמצעות שמו. לדוגמה, אפשר לציין "alpha" או "backgroundColor" לאובייקט View. הרכיב objectAnimator לא חושף את target אבל אי אפשר להגדיר את האובייקט כאנימציה בהצהרת ה-XML. אתם צריכים ניפוח משאב ה-XML של האנימציה באמצעות קריאה ל-loadAnimator(), וקוראים לפונקציה setTarget() כדי להגדיר אובייקט היעד שמכיל את המאפיין הזה.
android:valueTo
float, in או color. חובה. הערך שבו מסתיים הנכס המונפש. הצבעים מיוצגים למספרים הקסדצימליים בני שש ספרות, כמו #333333.
android:valueFrom
float, in או color. הערך שבו מתחיל הנכס המונפש. אחרת צוין, האנימציה מתחילה בערך שמתקבל באמצעות ה-method get של הנכס. הצבעים מיוצגים למספרים הקסדצימליים בני שש ספרות, כמו #333333.
android:duration
int הזמן באלפיות השנייה של האנימציה. ברירת המחדל היא 300 אלפיות השנייה.
android:startOffset
int משך אלפיות השנייה עד שהאנימציה מושהית לאחר מכן מתבצעת שיחה אל start().
android:repeatCount
int מספר הפעמים לחזרה על אנימציה. הגדרה ל-"-1" ללא הגבלה או למספר שלם חיובי. לדוגמה, הערך "1" פירושו שהאנימציה חוזרת על עצמה פעם אחת לאחר ההרצה הראשונית של האנימציה, כך שהאנימציה מפעילה פעמיים. ערך ברירת המחדל הוא "0", כלומר ללא חזרות.
android:repeatMode
int אופן הפעולה של אנימציה כשהיא מגיעה לסופה. android:repeatCount כדי שלמאפיין הזה תהיה השפעה, צריך להגדיר אותו כמספר שלם חיובי או את "-1". הגדרה לערך "reverse" להעביר את האנימציה בכיוון ההפוך בכל איטרציה, או "restart" כדי שהאנימציה מההתחלה, בכל פעם.
android:valueType
מילת מפתח. אל תציינו את המאפיין הזה אם הערך הוא צבע. מסגרת האנימציה מטפלת בצבע באופן אוטומטי ערכים.
ערךתיאור
intTypeמציינת שהערכים המונפשים הם מספרים שלמים.
floatType (ברירת מחדל)מציינת שהערכים המונפשים הם צפים.
<animator>
מפעיל אנימציה במשך פרק זמן מוגדר. מייצג ValueAnimator.

מאפיינים:

android:valueTo
float, in או color. חובה. הערך שבו האנימציה מסתיימת. הצבעים מיוצגים למספרים הקסדצימליים בני שש ספרות, כמו #333333.
android:valueFrom
float, in או color. חובה. הערך שבו האנימציה מתחילה. הצבעים מיוצגים למספרים הקסדצימליים בני שש ספרות, כמו #333333.
android:duration
int הזמן באלפיות השנייה של האנימציה. ברירת המחדל היא 300 אלפיות השנייה.
android:startOffset
int משך אלפיות השנייה עד שהאנימציה מושהית לאחר מכן מתבצעת שיחה אל start().
android:repeatCount
int מספר הפעמים לחזרה על אנימציה. הגדרה ל-"-1" ללא הגבלה או למספר שלם חיובי. לדוגמה, הערך "1" פירושו שהאנימציה חוזרת על עצמה פעם אחת לאחר ההרצה הראשונית של האנימציה, כך שהאנימציה מפעילה פעמיים. ערך ברירת המחדל הוא "0", כלומר ללא חזרות.
android:repeatMode
int אופן הפעולה של אנימציה כשהיא מגיעה לסופה. android:repeatCount כדי שלמאפיין הזה תהיה השפעה, צריך להגדיר אותו כמספר שלם חיובי או את "-1". הגדרה לערך "reverse" להעביר את האנימציה בכיוון ההפוך בכל איטרציה, או "restart" כדי שהאנימציה מההתחלה, בכל פעם.
android:valueType
מילת מפתח. אל תציינו את המאפיין הזה אם הערך הוא צבע. מסגרת האנימציה מטפלת בצבע באופן אוטומטי ערכים.
ערךתיאור
intTypeמציינת שהערכים המונפשים הם מספרים שלמים.
floatType (ברירת מחדל)מציינת שהערכים המונפשים הם צפים.
דוגמא:

קובץ ה-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();
למידע נוסף:

הצגת האנימציה

ה-framework של אנימציית התצוגה תומך גם באנימציות של ביניים וגם רינדור פריים, ששתיהן מוצהרות ב-XML. בקטעים הבאים מתואר איך להשתמש בשתי השיטות.

אנימציית ביניים

אנימציה שמוגדרת ב-XML שמבצעת מעברים על פריט גרפי, כמו סיבוב, דהייה, תזוזה והימתחות.

מיקום הקובץ:

res/anim/filename.xmlבצבע
שם הקובץ משמש כמזהה המשאב.
סוג נתונים של משאב מקומפל:
מצביע משאב ל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> מקוננים).

רכיבים:
<set>
קונטיינר שמכיל רכיבי אנימציה אחרים (<alpha>, <scale>, <translate>, <rotate>) או רכיבי <set> אחרים. מייצג AnimationSet.

מאפיינים:

android:interpolator
משאב אינטרפולטור. Interpolator להחלה על האנימציה. הערך חייב להיות הפניה למשאב שמציין אינטרפולטור, לא שם מחלקה של אינטרפולטור. יש אינטרפולטור ברירת מחדל הזמינים מהפלטפורמה, או שאתם יכולים ליצור משאב אינטרפולטור משלכם. בדיון הבא אפשר למצוא מידע נוסף על אינטרפולטורים.
android:shareInterpolator
בוליאני. "true" אם רוצים לשתף את אותו אינטרפולטור בין כל הילדים רכיבים.
<alpha>
אנימציה של יציאה הדרגתית או הדרגתית. מייצג AlphaAnimation.

מאפיינים:

android:fromAlpha
ציפה. קיזוז שקיפות התחלתי, שבו 0.0 הוא שקוף ו-1.0 אטום.
android:toAlpha
ציפה. קיזוז שקיפות מסתיים, כאשר 0.0 הוא שקוף ו-1.0 אטום.

למאפיינים נוספים שנתמכים על ידי <alpha>, אפשר לעיין בחומר העזר בנושא סיווג של Animation, שמאפייני ה-XML שלו עברו בירושה לרכיב הזה.

<scale>
אנימציה של שינוי הגודל. אפשר לציין את נקודת המרכז של התמונה שממנה היא צומחת כלפי חוץ או כלפי פנים, באמצעות ציון של pivotX ו-pivotY. לדוגמה, אם הערכים האלה הן 0,0 (בפינה השמאלית העליונה), כל הצמיחה היא למטה וימינה. מייצג ScaleAnimation.

מאפיינים:

android:fromXScale
ציפה. היסט החל של גודל X, שבו אין שינוי ב-1.0.
android:toXScale
ציפה. היסט גודל X מסתיים, כאשר אין שינוי ב-1.0.
android:fromYScale
ציפה. קיזוז גודל Y, שבו אין שינוי ב-1.0.
android:toYScale
ציפה. היסט גודל Y מסתיים, כאשר 1.0 ללא שינוי.
android:pivotX
ציפה. קואורדינטת ה-X שצריך להישאר קבועה כאשר גודל האובייקט משתנה.
android:pivotY
ציפה. קואורדינטת ה-Y צריכה להישאר קבועה כאשר האובייקט משתנה.

למאפיינים נוספים שנתמכים על ידי <scale>, אפשר לעיין בחומר העזר בנושא סיווג של Animation, שמאפייני ה-XML שלו עברו בירושה לרכיב הזה.

<translate>
תנועה אנכית או אופקית. מייצג TranslateAnimation תומכת במאפיינים הבאים בכל אחד משלושת הפורמטים האלה:
  • ערכים בין -100 ל-100 המסתיימים ב-"%", שמציין אחוז ביחס לעצמו.
  • ערכים בין -100 ל-100 המסתיימים ב-"%p", שמייצגים אחוז ביחס הורה.
  • ערך מסוג מספר ממשי (float) ללא סיומת, שמציין ערך מוחלט.

מאפיינים:

android:fromXDelta
ציפה או אחוז. היסט X מתחיל. יש לציין באופן יחסי בפיקסלים למיקום הרגיל, למשל "5"; באחוזים ביחס לרוחב הרכיב, כמו "5%"; או באחוזים ביחס לרוחב ההורה, למשל "5%p".
android:toXDelta
ציפה או אחוז. היסט X מסתיים. יש לציין באופן יחסי בפיקסלים למיקום הרגיל, למשל "5"; באחוזים ביחס לרוחב הרכיב, כמו "5%"; או באחוזים ביחס לרוחב ההורה, למשל "5%p".
android:fromYDelta
ציפה או אחוז. היסט התחלתי של Y. יש לציין באופן יחסי בפיקסלים למיקום הרגיל, למשל "5"; באחוזים ביחס לגובה הרכיב, כמו "5%"; או באחוזים ביחס לגובה ההורה, למשל "5%p".
android:toYDelta
ציפה או אחוז. היסט Y לסיום. יש לציין באופן יחסי בפיקסלים למיקום הרגיל, למשל "5"; באחוזים ביחס לגובה הרכיב, כמו "5%"; או באחוזים ביחס לגובה ההורה, למשל "5%p".

למאפיינים נוספים שנתמכים על ידי <translate>, אפשר לעיין בחומר העזר בנושא סיווג של Animation, שמאפייני ה-XML שלו עברו בירושה לרכיב הזה.

<rotate>
אנימציה של סיבוב. מייצג RotateAnimation.

מאפיינים:

android:fromDegrees
ציפה. נקודת התחלה זוויתית, במעלות.
android:toDegrees
ציפה. המיקום הזוויתי האחרון, במעלות.
android:pivotX
ציפה או אחוז. קואורדינטת ה-X של מרכז הסיבוב. הבעה בפיקסלים ביחס לקצה השמאלי של האובייקט, למשל "5". באחוזים יחסי לקצה השמאלי של האובייקט, למשל "5%"; או באחוזים ביחס להורה הקצה השמאלי של מאגר תגים, למשל "5%p".
android:pivotY
ציפה או אחוז. קואורדינטת ה-Y של מרכז הסיבוב. הבעה בפיקסלים ביחס לקצה העליון של האובייקט, למשל "5". באחוזים יחסי לקצה העליון של האובייקט, למשל "5%"; או באחוזים ביחס להורה הקצה העליון של הקונטיינר, למשל "5%p".

למאפיינים נוספים שנתמכים על ידי <rotate>, אפשר לעיין בחומר העזר בנושא סיווג של Animation, שמאפייני ה-XML שלו עברו בירושה לרכיב הזה.

דוגמא:

קובץ ה-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. הטבלה הבאה מציינת את המשאב שצריך להשתמש בו לכל אינטרפולטור:

שיעור אינטרפולטורמזהה משאב
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בצבע
שם הקובץ משמש כמזהה המשאב.
סוג נתונים של משאב מקומפל:
הסמן של המשאב לאובייקט האינטרפולטור המתאים
הפניה למשאבים:
ב-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"
    />

אם לא מחילים מאפיינים כלשהם, האינטרפולטור פועל בדיוק כמו אלה שסופקו על ידי הפלטפורמה, המפורטים בטבלה הקודמת.

רכיבים:
שימו לב שבכל הטמעה של Interpolator, מוגדר ב-XML – השם שלו מתחיל באות קטנה.

<accelerateDecelerateInterpolator>
קצב השינוי מתחיל ומסתיים לאט, אבל מואץ עד באמצע.

אין מאפיינים.

<accelerateInterpolator>
קצב השינוי מתחיל לאט ואז מואץ.

מאפיינים:

android:factor
ציפה. קצב ההאצה. ערך ברירת המחדל הוא 1.
<anticipateInterpolator>
השינוי מתחיל אחורה ואז זז קדימה.

מאפיינים:

android:tension
ציפה. מידת המתיחות שצריך להחיל. ערך ברירת המחדל הוא 2.
<anticipateOvershootInterpolator>
השינוי מתחיל אחורה, ואז נופל קדימה וחורג מערך היעד, ואז מופיע בערך הסופי.

מאפיינים:

android:tension
ציפה. מידת המתיחות שצריך להחיל. ערך ברירת המחדל הוא 2.
android:extraTension
ציפה. הסכום שבו מכפילים את המתח. ברירת המחדל היא 1.5.
<bounceInterpolator>
השינוי יופיע בסוף.

אין מאפיינים

<cycleInterpolator>
חוזרת על האנימציה במשך מספר מסוים של מחזורים. קצב השינוי תבנית סינוסאידלית.

מאפיינים:

android:cycles
מספר שלם. מספר המחזורים. ערך ברירת המחדל הוא 1.
<decelerateInterpolator>
קצב השינוי מתחיל במהירות ובהמשך פוחת.

מאפיינים:

android:factor
ציפה. קצב ההאטה. ערך ברירת המחדל הוא 1.
<linearInterpolator>
קצב השינוי הוא קבוע.

אין מאפיינים.

<overshootInterpolator>
השינוי נע קדימה, חורג מהערך האחרון ולאחר מכן חוזר.

מאפיינים:

android:tension
ציפה. מידת המתיחות שצריך להחיל. ערך ברירת המחדל הוא 2.
דוגמא:

קובץ ה-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בצבע
שם הקובץ משמש כמזהה המשאב.
סוג נתונים של משאב מקומפל:
מצביע משאב ל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>
רכיבים:
<animation-list>
חובה. הוא חייב להיות הרכיב הבסיסי (root). התווית מכילה ערך אחד או יותר רכיבי <item>.

מאפיינים:

android:oneshot
בוליאני. "true" אם רוצים לבצע את האנימציה פעם אחת; "false" כדי להפעיל לולאה אנימציה.
<item>
פריים יחיד של אנימציה. חייב להיות צאצא של רכיב <animation-list>.

מאפיינים:

android:drawable
משאב שניתן לשרטוט. פריט הגרפיקה לשימוש במסגרת הזו.
android:duration
מספר שלם. משך הזמן להצגת הפריים הזה, באלפיות השנייה.
דוגמא:

קובץ ה-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>

קוד האפליקציה הבא מגדיר את האנימציה כרקע של View, מפעילים את האנימציה:

Kotlin

val rocketImage: ImageView = findViewById(R.id.rocket_image)
rocketImage.setBackgroundResource(R.drawable.rocket_thrust)

val rocketAnimation = rocketImage.background
if (rocketAnimation is Animatable) {
    rocketAnimation.start()
}

Java

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
    ((Animatable)rocketAnimation).start();
}
למידע נוסף: