Korzystając z interfejsów API powrotu do systemu, możesz włączyć animacje w aplikacji i obsługę niestandardowych przejść.
Po włączeniu tej funkcji aplikacja będzie wyświetlać animacje powrotu do ekranu głównego, przechodzenia między aktywnościami i przełączania się między zadaniami.
Możesz też zaktualizować zależność komponentu materiału do wersji 1.10.0 biblioteki MDC Android, aby otrzymywać animacje komponentów materiału, takie jak te:
Więcej informacji znajdziesz w przewodniku dla programistów dotyczącym komponentów Material w GitHubie.
Film przedstawia krótki przykład animacji przewidywanego powrotu w przypadku przejścia między aktywnościami i powrotu do ekranu głównego w aplikacji Ustawienia na Androidzie.
- W animacji użytkownik przesuwa palcem w lewo, aby wrócić do poprzedniego ekranu ustawień – jest to przykład animacji między aktywnościami.
- Na poprzednim ekranie użytkownik ponownie przesuwa palcem w tył, wyświetlając podgląd ekranu głównego z tapetą – przykład animacji powrotu do ekranu głównego.
- Użytkownik nadal przesuwa palcem w prawo, co powoduje animację zmniejszania się okna do ikony na ekranie głównym.
- Użytkownik wrócił już w pełni do ekranu głównego.
Dowiedz się więcej o tym, jak dodać obsługę gestów powrotu z prognozowaniem.
Dodawanie niestandardowych przejść i animacji w aplikacji
Możesz tworzyć niestandardowe animacje i przejścia w aplikacji, niestandardowe animacje między aktywnościami i niestandardowe animacje między fragmentami z gestami przewidywania.
Dodawanie niestandardowych przejść za pomocą interfejsu Progress API
W przypadku AndroidaX Activity w wersji 1.8.0-alpha01 lub nowszej możesz używać interfejsów Predictive Back Progress API do tworzenia niestandardowych animacji gestu przewidywanego powrotu w aplikacji. Interfejsy Progress API są przydatne do animowania widoków, ale mają ograniczenia w przypadku animowania przejść między fragmentami. W ramach
OnBackPressedCallback
wprowadziliśmy metody
handleOnBackProgressed,
handleOnBackCancelled
i handleOnBackStarted
do animowania obiektów podczas przesuwania palcem w tył. Używaj tych metod, jeśli chcesz dostosować więcej animacji niż domyślne animacje systemowe lub animacje komponentów Material.
Spodziewamy się, że większość aplikacji będzie korzystać ze zgodnych wstecznie interfejsów API AndroidX, ale w OnBackAnimationCallback
dostępne są też podobne interfejsy Platform API, które można testować w Androidzie 14 w wersji Developer Preview 1 i nowszych.
Korzystanie z interfejsów Progress API z przejściami AndroidX
Interfejsów Progress API można używać z AndroidX Transitions w wersji 1.5.0-alpha01 lub nowszej na Androidzie 14 i nowszym do tworzenia przejść w ramach funkcji przewidywania powrotu.
- Użyj
TransitionManager#controlDelayedTransitionzamiastbeginDelayedTransition, aby odtwarzać przejścia, gdy użytkownik przesuwa palcem do tyłu. - Utwórz przejście w:
handleOnBackStarted. - Odtwórz przejście ze zdarzeniem wstecz w ramach
handleOnBackProgressed, powiązująccurrentFractionzBackEvent.progress, co pokazuje, jak daleko użytkownik przesunął palcem do tyłu. - Zakończ przejście po wykonaniu przez użytkownika gestu cofnięcia w
handleOnBackPressed. - Na koniec zresetuj stan przejścia w
handleOnBackCancelled.
Poniższy film, kod Kotlin i kod XML przedstawiają niestandardowe przejście między 2 polami zaimplementowane za pomocą funkcji 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>
Podczas pracy z przejściami w ramach funkcji przewidywanego powrotu pamiętaj o tych kwestiach:
- Użyj
isSeekingSupported, aby sprawdzić, czy przejście obsługuje predykcyjne cofanie. - Zastąp
isSeekingSupported, aby zwracać wartość „true” w przypadku przejść niestandardowych. - Utwórz po 1 kontrolerze na każdą animację.
- Przejścia Predictive Back są obsługiwane w przypadku przejść AndroidX, ale nie w przypadku przejść frameworka. Zrezygnuj z przejść frameworka i zamiast nich używaj
Animatori przejść AndroidX. - Przejścia z użyciem funkcji przewidywania powrotu są obsługiwane na urządzeniach z Androidem 14 i nowszym i nie są wstecznie kompatybilne.
- Obsługiwane są też przejścia utworzone za pomocą scen XML. W
handleOnBackStartedustawTransitionSeekControllerna wynikTransitionManager.createSeekControllerzamiast na wynikcontrolDelayedTransition.
Dodawanie niestandardowych przejść między aktywnościami na Androidzie 14 i nowszym
Aby mieć pewność, że niestandardowe przejścia między aktywnościami obsługują predykcyjne cofanie w Androidzie 14 i nowszych wersjach, możesz użyć overrideActivityTransition zamiast overridePendingTransition. Oznacza to, że animacja przejścia jest odtwarzana, gdy użytkownik przesuwa palcem do tyłu.
Aby zilustrować, jak to może działać, wyobraź sobie sytuację, w której aktywność B znajduje się na aktywności A na liście wstecznej. Animacje niestandardowych działań możesz obsługiwać w ten sposób:
- Wywołaj przejścia otwierające lub zamykające w metodzie
onCreateaktywności B. - Gdy użytkownik przechodzi do aktywności B, użyj
OVERRIDE_TRANSITION_OPEN. Gdy użytkownik przesunie palcem, aby wrócić do aktywności A, użyjOVERRIDE_TRANSITION_CLOSE. Gdy określisz
OVERRIDE_TRANSITION_CLOSE,enterAnimbędzie animacją wejścia aktywności A, aexitAnim– animacją wyjścia aktywności B.
Dodanie obsługi gestu przewidywanego przejścia wstecz w przypadku fragmentów
Podczas wdrażania przewidywanego przejścia wstecz z fragmentami można zastosować 2 podejścia.
Korzystanie z dotychczasowych interfejsów API
Zalecamy korzystanie z dotychczasowych interfejsów API. Te interfejsy API umożliwiają przesuwanie palcem od krawędzi ekranu w celu sterowania animatorem lub przejściami AndroidX za pomocą gestu. To, czy przesuniesz gest poza próg, decyduje o tym, czy zostanie on ukończony i wrócisz do poprzedniego fragmentu, czy zostanie anulowany i pozostaniesz w bieżącym fragmencie. Więcej informacji znajdziesz w artykule Przechodzenie między fragmentami za pomocą animacji.
Pamiętaj o tych kwestiach:
- Zaimportuj Transitions 1.5.0 lub nowszą wersję oraz Fragments 1.7.0 lub nowszą wersję. Większość funkcji przewidywania powrotu w fragmentach zależy od możliwości wyszukiwania animacji w przejściach, co jest możliwe tylko w przejściach w wersji 1.5.0 lub nowszej.
- Do obsługi stosu wstecznego używaj fragmentów z komponentem
FragmentManagerlub komponentem nawigacji. Przewidywane cofanie nie jest obsługiwane, jeśli samodzielnie zarządzasz stosem wstecznym. Przenoszenie z powrotem z listy wstecznej, o którejFragmentManagernie wie. - Niektóre biblioteki obsługują funkcję przewidywanego powrotu. Aby mieć pewność, zapoznaj się z dokumentacją.
- Obsługiwane są klasa
Animatori bibliotekaAndroidX Transition. - Klasa
Animationi biblioteka platformyTransitionnie są obsługiwane. - Animacje predykcyjne działają tylko na urządzeniach z Androidem 14 lub nowszym.
Używaj przewidywanego przejścia wstecz między fragmentami w tych sytuacjach:
- Animowanie komponentu nawigacji
- Animuj za pomocą
setCustomAnimations. - Animuj przejścia wejścia i wyjścia za pomocą
setEnterTransition,setExitTransition,setReenterTransitionisetReturnTransition. - Animuj przejścia udostępnionych elementów za pomocą
setSharedElementEnterTransitionisetSharedElementReturnTransition.
Niektóre animacje Material
obsługują przewidywanie powrotu od wersji 1.12.02-alpha02
lub nowszej, w tym MaterialFadeThrough, MaterialSharedAxis i MaterialFade.
Używanie wywołań zwrotnych
Przejście między fragmentami możesz utworzyć za pomocą wywołań zwrotnych, ale istnieje znane ograniczenie, które powoduje, że użytkownicy nie widzą poprzedniego fragmentu podczas przesuwania palcem w tył. Aby utworzyć przejście wspólnego elementu między fragmentami, które odpowiada wskazówkom dotyczącym projektowania przewidywanego przejścia wstecz, wykonaj te czynności:
Utwórz OnBackPressedCallback. W ramach handleOnBackProgressed skaluj i przesuwaj fragment. Następnie usuń go z listy. Następnie uruchom przejście elementu udostępnionego za pomocą setSharedElementReturnTransition poza wywołaniem zwrotnym.
Więcej informacji znajdziesz w przykładowym kodzie na GitHubie.
Wymagania
W tabeli poniżej znajdziesz informacje o tym, co jest kontrolowane przeztargetSdkVersioni compileSdkVersion, wersję urządzenia, zależności, flagi manifestu i flagi fragmentu. Ta tabela odnosi się do wymagań dotyczących kodu.
| Kategoria | Animacja | compileSdk | targetSdk | Wersja urządzenia | android:enableOnBackInvokedCallback | Zależność |
|---|---|---|---|---|---|---|
| Animacje systemowe | Powrót do strony głównej | 33 | Dowolny | 35 | PRAWDA | Brak |
| Różne aktywności | 34 | Dowolny | 35 | PRAWDA | Brak | |
| Wiele zadań | 34 | Dowolny | 35 | PRAWDA | Brak | |
| Platforma | Niestandardowa aktywność obejmująca różne rodzaje aktywności | 34 | Dowolny | 35 | PRAWDA | Brak |
| Platforma Progress API | 34 | Dowolny | 34 | PRAWDA | Brak | |
| Komponenty Material | Plansza dolna | 34 | Dowolny | 34 | PRAWDA | Komponent Material 1.10.0 |
| Arkusz boczny | 34 | Dowolny | 34 | PRAWDA | Komponent Material 1.10.0 | |
| Panel nawigacji | 34 | Dowolny | 34 | PRAWDA | Komponent Material 1.10.0 | |
| Szukaj | 34 | Dowolny | 34 | PRAWDA | Komponent Material 1.10.0 | |
| Jetpack Animations | Niestandardowy fragment AndroidX | 34 | Dowolny | 34 | PRAWDA | AndroidX Fragment 1.7 |
| Niestandardowe przejścia AndroidX | 34 | Dowolny | 34 | PRAWDA | AndroidX Transition 1.5 | |
| Progress API Jetpack | 34 | Dowolny | 34 | PRAWDA | AndroidX Activity 1.8 |
Dodatkowe materiały
- Przykłady kodu predykcyjnego powrotu
- Podstawowe informacje o filmach z systemem z tyłu
- Tworzymy przyszłość filmów na Androidzie