משאב אנימציה יכול להגדיר אחד משני סוגים של אנימציות:
- אנימציה של נכס
- יצירת אנימציה על ידי שינוי ערכי המאפיין של אובייקט במשך תקופה מוגדרת
עם
Animator
. - הצגת האנימציה
-
יש שני סוגים של אנימציות שניתן לבצע באמצעות מסגרת האנימציה של התצוגה:
- אנימציה של טרום-עשרה: יוצרת אנימציה על ידי ביצוע סדרה של טרנספורמציות על תמונה יחידה
עם
Animation
. - אנימציה של פריים: יוצרת אנימציה על ידי הצגה של רצף תמונות לפי סדר
עם
AnimationDrawable
.
- אנימציה של טרום-עשרה: יוצרת אנימציה על ידי ביצוע סדרה של טרנספורמציות על תמונה יחידה
עם
אנימציה של הנכס
אנימציה שמוגדרת ב-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>
. - רכיבים:
- דוגמא:
-
קובץ ה-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();
- למידע נוסף:
-
- סקירה כללית של אנימציה בנכס
- דוגמאות להדגמות של API לאופן השימוש במערכת האנימציה של המאפיינים
res/animator/filename.xml
בצבע הצגת האנימציה
ה-framework של אנימציית התצוגה תומך גם באנימציות של ביניים וגם רינדור פריים, ששתיהן מוצהרות ב-XML. בקטעים הבאים מתואר איך להשתמש בשתי השיטות.
אנימציית ביניים
אנימציה שמוגדרת ב-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>
מקוננים). - רכיבים:
- דוגמא:
-
קובץ ה-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); - למידע נוסף:
res/anim/filename.xml
בצבע אינטרפולטורים
אינטרפולטור הוא תכונת שינוי של אנימציה שמוגדרת ב-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.
- מיקום הקובץ:
- שם הקובץ משמש כמזהה המשאב.
- סוג נתונים של משאב מקומפל:
- הסמן של המשאב לאובייקט האינטרפולטור המתאים
- הפניה למשאבים:
-
ב-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 – השם שלו מתחיל באות קטנה. - דוגמא:
-
קובץ ה-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" />
res/anim/filename.xml
בצבע אנימציה של מסגרת
אנימציה שמוגדרת ב-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>
- רכיבים:
- דוגמא:
-
קובץ ה-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 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()
; } - למידע נוסף:
res/drawable/filename.xml
בצבע