אם כבר העברתם את האפליקציה לממשקי ה-API החדשים לגרסה החדשה, אפשר הבעת הסכמה לקבלת חיזוי חזרה לאפליקציה באופן אוטומטי אנימציות, וגם תמיכה במעברים מותאמים אישית.
הוספת תמיכה באנימציות מובנות בתוך האפליקציה
לאחר הבעת ההסכמה, האפליקציה תציג אנימציות של החזרה הביתה, פעילות צולבת, ובין משימות שונות.
ניתן גם לשדרג את התלות של רכיבי החומר המילוליים לגרסה 1.10.0 של MDC Android לקבלת אנימציות של רכיבים מהותיים כמו:
מידע נוסף זמין בהנחיות למפתחים של רכיבי חומר ב-GitHub מידע.
הסרטון מציג דוגמה קצרה לאנימציות אחורה של 'חזרה' פעילות שונות וחזרה הביתה באמצעות האפליקציה 'הגדרות' של Android.
- באנימציה, המשתמש מחליק בחזרה כדי לחזור להגדרות הקודמות המסך - דוגמה לאנימציה של פעילות צולבת.
- עכשיו במסך הקודם, המשתמש מתחיל להחליק אחורה פעם שנייה. הצגת תצוגה מקדימה של מסך הבית עם הטפט שלו - דוגמה את האנימציה של החזרה לבית.
- המשתמש ממשיך להחליק ימינה ומוצג אנימציה של החלון מתכווץ לסמל במסך הבית.
- המשתמש חזר במלואו למסך הבית.
מידע נוסף על תמיכה בחיזוי חזרה.
הוספה של מעברים ואנימציות בהתאמה אישית בתוך האפליקציה
אפשר ליצור אנימציות ומעברים מותאמים אישית של נכס מתוך האפליקציה באמצעות
Progress API ושיטה מותאמת אישית לאנימציות של פעילויות שונות
overrideActivityTransition
הוספת מעברים בהתאמה אישית באמצעות Progress API
עם פעילות AndroidX מגרסה 1.8.0-alpha01 ואילך, ניתן להשתמש במנגנון החיזוי
התקדמות ממשקי API לפיתוח אנימציות מותאמות אישית
תנועת החזרה החזויה באפליקציה. בטווח של
OnBackPressedCallback
הצגנו את handleOnBackProgressed
, handleOnBackCancelled
שיטות handleOnBackStarted
להנפשה של אובייקטים בזמן שהמשתמש מחליק בחזרה. כדאי להשתמש
את השיטות האלה אם צריכים משהו מותאם אישית יותר מאנימציות ברירת המחדל
שסופקו על ידי אנימציית המערכת החדשה או באמצעות האנימציות מסוג Material Component.
אנחנו מצפים שרוב האפליקציות ישתמשו בממשקי API של AndroidX בתאימות לאחור, אבל יש
גם ממשקי API של פלטפורמות דומות
OnBackAnimationCallback
ממשק זמין לבדיקה ב-Android 14 Developer Preview גרסה 1 ואילך.
שימוש בממשקי Progress API עם מעברים של AndroidX
ניתן להשתמש בממשקי Progress API עם AndroidX Transits מגרסה 1.5.0-alpha01 ואילך ב-Android מגרסה 14 ואילך כדי ליצור העברות חזויות חזרה.
- במקום להשתמש ב-
TransitionManager#controlDelayedTransition
beginDelayedTransition
למשחק המעברים בתור המשתמש מחליק בחזרה. - יוצרים את המעבר בתוך
handleOnBackStarted
. - מפעילים את המעבר עם אירוע 'הקודם' שמתקיים בתוך
handleOnBackProgressed
עד בקשר ל-currentFraction
אלBackEvent.progress
, שחושף את המרחק המשתמש החליף בחזרה. - סיום המעבר אחרי שהמשתמש ביצע את תנועת החזרה בתוך
handleOnBackPressed
- לסיום, צריך לאפס את מצב המעבר בתוך
handleOnBackCancelled
.
הסרטון הבא, קוד Kotlin ו-XML מדגימים מעבר מותאם אישית
בין שתי תיבות שהוטמעו באמצעות OnBackPressedCallback
:
class MyFragment : Fragment() {
val transitionSet = TransitionSet().apply {
addTransition(Fade(Fade.MODE_OUT))
addTransition(ChangeBounds())
addTransition(Fade(Fade.MODE_IN))
}
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val callback = object : OnBackPressedCallback(enabled = false) {
var controller: TransitionSeekController? = null
@RequiresApi(34)
override fun handleOnBackStarted(backEvent: BackEvent) {
// Create the transition
controller = TransitionManager.controlDelayedTransition(
binding.card,
transitionSet
)
changeTextVisibility(ShowText.SHORT)
}
@RequiresApi(34)
override fun handleOnBackProgressed(backEvent: BackEvent) {
// Play the transition as the user swipes back
if (controller?.isReady == true) {
controller?.currentFraction = backEvent.progress
}
}
override fun handleOnBackPressed() {
// Finish playing the transition when the user commits back
controller?.animateToEnd()
this.isEnabled = false
}
@RequiresApi(34)
override fun handleOnBackCancelled() {
// If the user cancels the back gesture, reset the state
transition(ShowText.LONG)
}
}
binding.shortText.setOnClickListener {
transition(ShowText.LONG)
callback.isEnabled = true
}
this.requireActivity().onBackPressedDispatcher.addCallback(callback)
}
private fun transition(showText: ShowText) {
TransitionManager.beginDelayedTransition(
binding.card,
transitionSet
)
changeTextVisibility(showText)
}
enum class ShowText { SHORT, LONG }
private fun changeTextVisibility(showText: ShowText) {
when (showText) {
ShowText.SHORT -> {
binding.shortText.isVisible = true
binding.longText.isVisible = false
}
ShowText.LONG -> {
binding.shortText.isVisible = false
binding.longText.isVisible = true
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
...
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...>
<TextView
android:id="@+id/short_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
... />
<TextView
android:id="@+id/long_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
.../>
</androidx.constraintlayout.widget.ConstraintLayout>
כדאי לשים לב לדברים הבאים כשעובדים עם חיזויים חזויים לחזרה:
- צריך להשתמש בפונקציה
isSeekingSupported
כדי לבדוק אם המעבר תומך ב'חזרה חזויה'. - כדי להחזיר את הערך True להעברות בהתאמה אישית צריך לשנות את
isSeekingSupported
. - יצירת בקר אחד לכל אנימציה.
- מעברי חזרה חזויים נתמכים עם מעברים מ-AndroidX, אבל לא במסגרת מעברים בין מסגרות. מומלץ לבצע מיגרציה מ-framework מעברים שונים.
- העברות חזויות חזרה נתמכות במכשירי Android 14 ואילך לא תואמת לאחור.
- יש תמיכה גם במעברים שנוצרו באמצעות סצנות XML. לחשבון
handleOnBackStarted
, הגדרתTransitionSeekController
כתוצאה שלTransitionManager.createSeekController
במקום התוצאה שלcontrolDelayedTransition
.
הוספת מעברים בין פעילויות בהתאמה אישית ב-Android 14 ואילך
כדי להבטיח שמעברים של פעילויות בהתאמה אישית יתמכו בהצגת חיזויים ב-Android 14
ומעלה, אתם יכולים להשתמש ב-overrideActivityTransition
overridePendingTransition
כלומר אנימציית המעבר תפעל
המשתמש מחליק בחזרה.
כדי להמחיש איך זה יכול לקרות, נבחן תרחיש שבו פעילות ב' נמצאת מעל פעילות א' במקבץ האחורי. צריך לטפל בהתאמה אישית את האנימציות של הפעילות באופן הבא:
- קריאה לפתיחה או לסגירה של מעברים בתוך
onCreate
של פעילות ב' . - כשהמשתמש מנווט לפעילות ב', יש להשתמש ב-
OVERRIDE_TRANSITION_OPEN
. מתי המשתמש מחליק כדי לחזור לפעילות א', השתמשוOVERRIDE_TRANSITION_CLOSE
כשמציינים את הערך
OVERRIDE_TRANSITION_CLOSE
, הערךenterAnim
הוא הערך של פעילות א' כניסה לאנימציה, והexitAnim
הוא אנימציית היציאה של פעילות ב'.