מעבר בהתאמה אישית מאפשר ליצור אנימציה שאינה זמינה מאף אחד מה- את מחלקות המעבר המובנות. לדוגמה, ניתן להגדיר מעבר מותאם אישית שמפנה הצבע הקדמי של שדות הטקסט והקלט יהיה אפור, כדי לציין שהשדות מושבתים. במסך החדש. שינוי מהסוג הזה עוזר למשתמשים לראות את השדות שהשבתתם.
מעבר מותאם אישית, כמו אחד מסוגי המעברים המובנים, מחיל אנימציות על של סצנות ההתחלה והסיום. עם זאת, בניגוד לסוגי המעברים המובנים, צריך לספק את הקוד שמתעד את ערכי הנכס ויוצר אנימציות. תוכלו גם להגדיר קבוצת משנה של תצוגות יעד לאנימציה.
בדף הזה מוסבר איך לתעד את ערכי הנכסים וליצור אנימציות ליצירה מעברים בהתאמה אישית.
מרחיבים את מחלקת המעבר
כדי ליצור מעבר מותאם אישית, צריך להוסיף לפרויקט מחלקה שמרחיבים את המחלקה Transition
ולשנות את הפונקציות שמוצגות בקטע הקוד הבא:
Kotlin
class CustomTransition : Transition() { override fun captureStartValues(transitionValues: TransitionValues) {} override fun captureEndValues(transitionValues: TransitionValues) {} override fun createAnimator( sceneRoot: ViewGroup, startValues: TransitionValues?, endValues: TransitionValues? ): Animator? {} }
Java
public class CustomTransition extends Transition { @Override public void captureStartValues(TransitionValues values) {} @Override public void captureEndValues(TransitionValues values) {} @Override public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues) {} }
בקטעים הבאים מוסבר איך לבטל את הפונקציות האלה.
תיעוד ערכי הנכסים בתצוגה
אנימציות מעבר משתמשות במערכת האנימציה של המאפיינים המתוארת ב- סקירה כללית של אנימציה של נכס מאפיין (property) אנימציות משנות מאפיין של תצוגה מפורטת מערך התחלה לערך סיום מעל ערך שצוין של משך הזמן, כך שהמסגרת צריכה לכלול גם את ערכי ההתחלה והסיום של את המאפיין כדי ליצור את האנימציה.
עם זאת, בדרך כלל לאנימציה של נכס נדרשת רק קבוצת משנה קטנה מכל הנכסים של התצוגה המפורטת ערכים. לדוגמה, לאנימציה של צבע נדרשים ערכים של מאפייני צבע, ואילו תנועה לאנימציה נדרשת ערכים של מאפיין מיקום. מאחר שערכי המאפיינים שנדרשים לאנימציה הם ספציפיים למעבר, מסגרת המעברים לא מספקת כל ערך נכס למעבר. במקום זאת, ה-framework מפעיל פונקציות קריאה חוזרת שמאפשרות מעבר אל מתעדים רק את ערכי המאפיין הנדרשים ושומרים אותם במסגרת.
תיעוד הערכים ההתחלתיים
כדי להעביר ל-framework את הערכים של תצוגת ההתחלה, צריך להטמיע את
captureStartValues(transitionValues)
מותאמת אישית. תוכנת ה-framework מפעילה את הפונקציה הזו לכל תצוגה בסצנת ההתחלה. הפונקציה
ארגומנט הוא אובייקט TransitionValues
שמכיל הפניה
לתצוגה המפורטת ולמופע Map
שבו תוכלו לשמור את ערכי התצוגה
רוצה. בהטמעה, מאחזרים את ערכי המאפיין ומחזירים אותם
על ידי אחסונו במפה.
כדי לוודא שהמפתח של ערך הנכס לא מתנגש עם
TransitionValues
מפתחות, צריך להשתמש בסכמת השמות הבאה:
package_name:transition_name:property_name
בקטע הקוד הבא מוצג מימוש של הפונקציה captureStartValues()
:
Kotlin
class CustomTransition : Transition() { // Define a key for storing a property value in // TransitionValues.values with the syntax // package_name:transition_class:property_name to avoid collisions private val PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background" override fun captureStartValues(transitionValues: TransitionValues) { // Call the convenience method captureValues captureValues(transitionValues) } // For the view in transitionValues.view, get the values you // want and put them in transitionValues.values private fun captureValues(transitionValues: TransitionValues) { // Get a reference to the view val view = transitionValues.view // Store its background property in the values map transitionValues.values[PROPNAME_BACKGROUND] = view.background } ... }
Java
public class CustomTransition extends Transition { // Define a key for storing a property value in // TransitionValues.values with the syntax // package_name:transition_class:property_name to avoid collisions private static final String PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background"; @Override public void captureStartValues(TransitionValues transitionValues) { // Call the convenience method captureValues captureValues(transitionValues); } // For the view in transitionValues.view, get the values you // want and put them in transitionValues.values private void captureValues(TransitionValues transitionValues) { // Get a reference to the view View view = transitionValues.view; // Store its background property in the values map transitionValues.values.put(PROPNAME_BACKGROUND, view.getBackground()); } ... }
תיעוד ערכים סופיים
ה-framework מפעיל את הפונקציה captureEndValues(TransitionValues)
פעם אחת לכל צפייה ביעד בסצנת הסיום. בכל שאר הבחינות, captureEndValues()
פועל באותו אופן כמו captureStartValues()
.
בקטע הקוד הבא מוצג מימוש של הפונקציה captureEndValues()
:
Kotlin
override fun captureEndValues(transitionValues: TransitionValues) { captureValues(transitionValues) }
Java
@Override public void captureEndValues(TransitionValues transitionValues) { captureValues(transitionValues); }
בדוגמה הזו, גם captureStartValues()
וגם captureEndValues()
הפונקציות מפעילות את captureValues()
כדי לאחזר ולאחסן ערכים. המאפיין של תצוגה מפורטת
שהמאחזר captureValues()
זהה, אבל יש לו ערכים שונים
סצנות ההתחלה והסיום. במסגרת המערכת שומרת מפות נפרדות להתחלה ולסיום
במצב של תצוגה.
יצירת אנימטור בהתאמה אישית
כדי להוסיף אנימציה לשינויים בתצוגה בין המצב בסצנת ההתחלה לבין המצב שלה
את סצנת הסיום, הוסיפו אנימטור
createAnimator()
מותאמת אישית. כשה-framework קורא לפונקציה הזו, היא עוברת בתצוגת הרמה הבסיסית (root) של הסצנה
TransitionValues
אובייקטים שמכילים את ערכי ההתחלה והסיום
שצילמתם.
מספר הפעמים שה-framework קורא לפונקציה createAnimator()
תלוי
שינויים שמתרחשים בין סצינת ההתחלה והסיום.
לדוגמה, אפשר לקחת בחשבון יציאה הדרגתית או
אנימציית כניסה הדרגתית שמוטמעת כמעבר מותאם אישית. אם לסצנת ההתחלה יש חמישה יעדים,
שבהן שתיים יוסרו מסצנת הסיום, ובסצנת הסיום יש את שלושת היעדים
הסצנה הראשונה וגם יעד חדש, ואז המסגרת מפעילה createAnimator()
שש פעמים.
בשלוש מהשיחות מופיעות אנימציה של יציאה הדרגתית והדרגתית של היעדים שנשארים בשתי הסצנות
אובייקטים. שתי שיחות נוספות מכילות אנימציה של תהליך ההדרגתי של היעדים שהוסרו מסצנת הסיום. אחת
השיחה מפעילה אנימציה של 'הרגע הדרגתי' של היעד החדש בסצנת הסיום.
בתצוגות יעד שקיימות גם בסצנת ההתחלה וגם בסצינת הסיום, המסגרת מספקת
אובייקט TransitionValues
גם ל-startValues
וגם ל-
endValues
ארגומנטים. לתצוגות יעד שקיימות רק בהתחלה או
הסצנה האחרונה, ה-framework מספק אובייקט TransitionValues
לארגומנט התואם ול-null
בשביל השני.
כדי להטמיע את הפונקציה createAnimator(ViewGroup, TransitionValues, TransitionValues)
כשיוצרים את
מעבר בהתאמה אישית, משתמשים בערכי המאפיינים של התצוגה המפורטת שתיעדתם כדי ליצור אובייקט Animator
ולהחזיר אותו ל-framework. לצורך הטמעה לדוגמה,
לראות את הכיתה ChangeColor
ב
דוגמה של מעבר מותאם אישית. לקבלת מידע נוסף על אנימטורים של נדל"ן, ראו
אנימציה של נכס.
החלת מעבר בהתאמה אישית
מעברים בהתאמה אישית פועלים בדיוק כמו מעברים מובנים. אפשר להחיל מעבר בהתאמה אישית באמצעות מנהל מעבר, כפי שמתואר במאמר החלת מעבר.