אנימציות יכולות להוסיף רמזים חזותיים שמיידעים את המשתמשים לגבי מה שקורה באפליקציה. הן שימושיות במיוחד כשממשק המשתמש משנה את המצב שלו, למשל כשתוכן חדש נטען או כשפעולות חדשות הופכות לזמינות. אנימציות גם מוסיפות מראה מלוטש לאפליקציה, וזה משפר את האיכות של המראה והתחושה שלה.
מערכת Android כוללת ממשקי API שונים של אנימציות, בהתאם לסוג האנימציה שרוצים. במסמכי התיעוד האלה מוסבר על הדרכים השונות שבהן אפשר להוסיף תנועה לממשק המשתמש.
כדי להבין טוב יותר מתי כדאי להשתמש באנימציות, אפשר לעיין גם במדריך Material Design בנושא תנועה.
הנפשת מפות סיביות
איור 1. פריט גרפי מונפש שניתן לשרטוט.
כדי להנפיש גרפיקת מפת סיביות כמו סמל או איור, משתמשים בממשקי ה-API של drawable animation. בדרך כלל, ההנפשות האלה מוגדרות באופן סטטי באמצעות משאב drawable, אבל אפשר גם להגדיר את התנהגות ההנפשה בזמן ריצה.
לדוגמה, דרך טובה להראות למשתמש ששתי פעולות קשורות זו לזו היא להציג אנימציה של לחצן הפעלה שהופך ללחצן השהיה כשמקישים עליו.
מידע נוסף זמין במאמר הנפשה של גרפיקה מסוג drawable.
הנפשה של חשיפת ממשק המשתמש והתנועה
איור 2. אנימציה עדינה שמוצגת כשתיבת דו-שיח מופיעה ונעלמת, כדי שהשינוי בממשק המשתמש יהיה פחות בולט.
כשצריך לשנות את הנראות או את המיקום של התצוגות בפריסה, מומלץ להוסיף אנימציות עדינות כדי לעזור למשתמש להבין איך ממשק המשתמש משתנה.
כדי להזיז, להציג או להסתיר תצוגות בפריסה הנוכחית, אפשר להשתמש במערכת הנפשות המאפיינים שסופקה על ידי חבילת android.animation
, שזמינה ב-Android 3.0 (רמת API 11) ומעלה. ממשקי ה-API האלה מעדכנים את המאפיינים של אובייקטים מסוג View
לאורך זמן, ומציירים מחדש את התצוגה באופן רציף כשהמאפיינים משתנים. לדוגמה, כשמשנים את מאפייני המיקום, התצוגה זזה על המסך. כשמשנים את מאפיין האלפא, התצוגה דוהה פנימה או החוצה.
הדרך הכי פשוטה ליצור את האנימציות האלה היא להפעיל אנימציות בפריסה, כך שכשתשנו את הגדרת החשיפה של תצוגה, אנימציה תופעל באופן אוטומטי. מידע נוסף זמין במאמר עדכונים אוטומטיים של פריסות עם אנימציה.
כדי ללמוד איך ליצור אנימציות באמצעות מערכת האנימציה של המאפיינים, אפשר לקרוא את המאמר סקירה כללית על אנימציה של מאפיינים. אפשר גם לעיין בדפים הבאים כדי ליצור אנימציות נפוצות:
תנועה שמבוססת על פיזיקה
איור 3. אנימציה שנוצרה באמצעות ObjectAnimator.
איור 4. אנימציה שנוצרה באמצעות ממשקי API מבוססי פיזיקה.
כשהדבר אפשרי, כדאי להחיל פיזיקה מהעולם האמיתי על האנימציות כדי שהן ייראו טבעיות. לדוגמה, הן צריכות לשמור על המומנטום כשהיעד משתנה ולבצע מעברים חלקים במהלך שינויים.
כדי לספק את ההתנהגויות האלה, ספריית התמיכה של Android כוללת ממשקי API של אנימציה שמבוססים על פיזיקה, ומסתמכים על חוקי הפיזיקה כדי לשלוט באופן שבו האנימציות מתרחשות.
שני סוגים נפוצים של אנימציות שמבוססות על פיזיקה:
אנימציות שלא מבוססות על פיזיקה – כמו אלה שנוצרו באמצעות ממשקי API של ObjectAnimator
– הן די סטטיות ובעלות משך קבוע. אם ערך היעד משתנה, צריך לבטל את האנימציה בזמן השינוי של ערך היעד, להגדיר מחדש את האנימציה עם ערך חדש כערך ההתחלתי החדש ולהוסיף את ערך היעד החדש. מבחינה ויזואלית, התהליך הזה יוצר עצירה פתאומית באנימציה, ותנועה לא רציפה לאחר מכן, כמו שמוצג באיור 3.
אנימציות שנוצרו באמצעות ממשקי API של אנימציה מבוססת-פיזיקה, כמו DynamicAnimation
, מונעות על ידי כוח. השינוי בערך היעד גורם לשינוי בכוח. הכוח החדש מופעל על המהירות הקיימת, וכך מתבצע מעבר רציף ליעד החדש. התהליך הזה יוצר אנימציה שנראית טבעית יותר, כמו שמוצג באיור 4.
הוספת אנימציה לשינויים בפריסה
איור 5. כדי להציג אנימציה עם פרטים נוספים, אפשר לשנות את הפריסה או להתחיל פעילות חדשה.
ב-Android 4.4 (API ברמה 19) ומעלה, אפשר להשתמש במסגרת המעבר כדי ליצור אנימציות כשמחליפים את הפריסה בפעילות או בקטע הנוכחיים. כל מה שצריך לעשות הוא לציין את הפריסה של תחילת האנימציה וסופה, ואת סוג האנימציה שרוצים להשתמש בו. לאחר מכן המערכת מחשבת ומבצעת אנימציה בין שני הפריסות. אפשר להשתמש בזה כדי להחליף את כל ממשק המשתמש או כדי להזיז או להחליף רק חלק מהתצוגות.
לדוגמה, כשמשתמש מקיש על פריט כדי לראות מידע נוסף, אפשר להחליף את הפריסה בפרטי הפריט, ולהחיל מעבר כמו זה שמוצג באיור 5.
פריסת המסך בהתחלה ובסוף נשמרת ב-Scene
, אבל בדרך כלל המערכת קובעת אוטומטית את הפריסה בהתחלה לפי הפריסה הנוכחית. יוצרים Transition
כדי לציין למערכת את סוג האנימציה הרצוי, ואז קוראים ל-TransitionManager.go()
והמערכת מריצה את האנימציה כדי להחליף את הפריסות.
מידע נוסף זמין במאמר בנושא הנפשת שינויים בפריסה באמצעות מעבר. קוד לדוגמה זמין ב-BasicTransition.
הנפשה בין פעילויות
ב-Android 5.0 (רמת API 21) ואילך, אפשר גם ליצור אנימציות שיוצרות מעבר בין הפעילויות. האפשרות הזו מבוססת על אותו מסגרת מעבר שמתוארת בקטע הקודם, אבל היא מאפשרת ליצור אנימציות בין פריסות בפעילויות נפרדות.
אפשר להוסיף אנימציות פשוטות כמו החלקה של הפעילות החדשה מהצד או הוספה הדרגתית שלה, אבל אפשר גם ליצור אנימציות שיוצרות מעבר בין תצוגות משותפות בכל פעילות. לדוגמה, כשמשתמש מקיש על פריט כדי לראות מידע נוסף, אפשר לעבור לפעילות חדשה עם אנימציה שמרחיבה את הפריט בצורה חלקה כך שימלא את המסך, כמו האנימציה שמוצגת באיור 5.
כמו תמיד, מתקשרים אל startActivity()
, אבל מעבירים חבילת אפשרויות שסופקה על ידי ActivityOptions.makeSceneTransitionAnimation()
.
חבילת האפשרויות הזו עשויה לכלול את התצוגות שמשותפות בין הפעילויות, כדי שמסגרת המעבר תוכל לקשר ביניהן במהלך האנימציה.
משאבים נוספים: