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

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

אנימציית ביניים יכולה לבצע סדרה של טרנספורמציות פשוטות (מיקום, גודל, סיבוב, ושקיפות) בתוכן של אובייקט View. לכן, אם יש לכם אובייקט TextView, אתם יכולים להזיז, לסובב, להגדיל או לכווץ את הטקסט. אם הוא כולל תמונת רקע, תמונת הרקע תשתנה יחד עם הטקסט. animation package מציג את כל הכיתות באנימציה של גיל טרום-עשרה.

רצף של הוראות אנימציה מגדיר את אנימציית הביניים, המוגדרת באמצעות XML או קוד Android. בדומה להגדרת פריסה, מומלץ להשתמש בקובץ XML מכיוון שהוא קריא יותר, לשימוש חוזר והחלפה, מאשר בקידוד קשיח של האנימציה. בדוגמה הבאה אנחנו משתמשים ב-XML. (אל: לקבלת מידע נוסף על הגדרת אנימציה בקוד האפליקציה, במקום ב-XML, AnimationSet כיתה ו-Animation כיתות משנה אחרות).

הוראות האנימציה מגדירות את הטרנספורמציות שרוצים שיתרחשו, וכמה זמן לוקח להם ליישם אותן. טרנספורמציות יכולות להיות עוקבות או סימולטניות - לדוגמה, אפשר לגרום לתוכן של TextView לעבור משמאל לימין, ואז לסובב ב-180 מעלות, או מצב שבו הטקסט יזוז ומסתובב בו-זמנית. כל טרנספורמציה לוקחת קבוצת פרמטרים שהם ספציפיים להמרה הזו (גודל התחלה וגודל סיום עבור גודל) משתנה, זווית התחלה וזווית סיום לסיבוב וכן הלאה), וגם קבוצה של פרמטרים (למשל, שעת התחלה ומשך זמן). לבצע כמה טרנספורמציות במקביל, לתת להם את אותה שעת התחלה, כדי להפוך אותן לרציפות, חשבו את שעת ההתחלה בתוספת משך הזמן של הטרנספורמציה הקודמת.

קובץ ה-XML של האנימציה שייך לספרייה res/anim/ ב-Android פרויקט. הקובץ חייב להכיל רכיב בסיס אחד: הוא יכול להיות רכיב אחד <alpha>, <scale>, <translate> <rotate>, רכיב אינטרפולטור או רכיב <set> שמחזיק קבוצות של רכיבים אלה (שעשויות לכלול <set> נוסף). כברירת מחדל, כל הוראות אנימציה מוחלות בו-זמנית. כדי שהן יופיעו ברצף, צריך לציין את המאפיין startOffset כמו בדוגמה למטה.

ה-XML הבא מאחד מ-ApiDemos משמש למתיחות, ואז בו-זמנית לסובב וגם סיבוב של אובייקט תצוגה.

<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 הזה נשמר בתור hyperspace_jump.xml ב-res/anim/ של הפרויקט, הקוד הבא יפנה אליו ויחיל אותו על אובייקט 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, ועל התגים והמאפיינים הזמינים, ראו משאבי אנימציה.

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