אם כבר העברתם את האפליקציה לממשקי ה-API החדשים של חזרה לאחור במערכת, תוכלו להביע הסכמה לשימוש בתכונה 'חזרה חזוי' כדי לקבל אנימציות באפליקציה באופן אוטומטי, וגם לתמוך במעברים מותאמים אישית.
הוספת תמיכה באנימציות מובנות באפליקציה
לאחר הבעת ההסכמה, האפליקציה תציג אנימציות של החזרה הביתה, פעילות צולבת, ובין משימות שונות.
אפשר גם לשדרג את התלות ברכיבי Material לגרסה 1.10.0 של MDC ל-Android כדי לקבל אנימציות של רכיבי Material, כמו:
מידע נוסף זמין במדריך למפתחים של רכיבי Material ב-GitHub.
הסרטון מציג דוגמה קצרה לאנימציות חזרה של פעילות שונות וחזרה הביתה באמצעות האפליקציה 'הגדרות' של Android.
- באנימציה, המשתמש מחליק בחזרה כדי לחזור להגדרות הקודמות המסך - דוגמה לאנימציה של פעילות צולבת.
- עכשיו במסך הקודם, המשתמש מתחיל להחליק שוב לאחור, מוצגת תצוגה מקדימה של מסך הבית עם הטפט שלו – דוגמה לאנימציה של החזרה למסך הבית.
- המשתמש ממשיך להחליק ימינה ומוצג אנימציה של החלון מתכווץ לסמל במסך הבית.
- המשתמש חזר במלואו למסך הבית.
מידע נוסף על תמיכה בחיזוי חזרה.
הוספה של מעברים ואנימציות בהתאמה אישית בתוך האפליקציה
אפשר ליצור אנימציות ומעברים מותאמים אישית של נכס מתוך האפליקציה באמצעות
Progress API ושיטה מותאמת אישית לאנימציות של פעילויות שונות
overrideActivityTransition
הוספת מעברים בהתאמה אישית באמצעות Progress API
עם פעילות AndroidX מגרסה 1.8.0-alpha01 ואילך, ניתן להשתמש במנגנון החיזוי
התקדמות ממשקי API לפיתוח אנימציות מותאמות אישית
תנועת החזרה החזויה באפליקציה. בטווח של
OnBackPressedCallback
הצגנו את handleOnBackProgressed
, handleOnBackCancelled
שיטות handleOnBackStarted
להנפשה של אובייקטים בזמן שהמשתמש מחליק בחזרה. כדאי להשתמש בשיטות האלה אם אתם צריכים אנימציות בהתאמה אישית יותר מאשר אנימציות ברירת המחדל שסופקו על ידי אנימציות המערכת החדשות או על ידי אנימציות הרכיבים של Material.
אנחנו צופים שרוב האפליקציות ישתמשו בממשקי ה-API של AndroidX עם תאימות לאחור, אבל יש גם ממשקי API דומים של פלטפורמות בממשק OnBackAnimationCallback
שזמינים לבדיקה ב-Android 14 Developer Preview 1 ואילך.
שימוש בממשקי Progress API עם מעברים של AndroidX
ניתן להשתמש בממשקי Progress API עם AndroidX Transitions מגרסה 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
כדי לבדוק אם המעבר תומך בחזרה חזויה. - משנים את הערך של
isSeekingSupported
כדי להחזיר את הערך true למעברים בהתאמה אישית. - יצירת בקר אחד לכל אנימציה.
- אפשר להשתמש במעברים חזויים אחורה במעברים של AndroidX, אבל לא במעברים של מסגרת. מומלץ להפסיק להשתמש במעברים של מסגרות.
- העברות חזויות חזרה נתמכות במכשירי 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
היא אנימציית היציאה של פעילות ב'.