Korzystając z systemowych interfejsów API wstecz, możesz wyrazić zgodę na otrzymywanie animacji w aplikacji i obsługiwać niestandardowe przejścia.
Po jej włączeniu aplikacja będzie wyświetlać animacje powrót do strony głównej, aktywności na różnych urządzeniach i różnych zadań.
Możesz też uaktualnić zależność komponentu Material Design do wersji 1.10.0 MDC na Androida, aby otrzymywać animacje komponentu Material Design, jak poniżej:
Więcej informacji znajdziesz w przewodniku dla programistów dotyczącym komponentów materiałów na GitHubie.
Film przedstawia krótki przykład animacji przejścia na ekran główny wyświetlany w różnych aktywnościach i po powrocie do domu w aplikacji Ustawienia Androida.
- W animacji użytkownik przesuwa palcem z powrotem, aby wrócić do poprzedniego ekranu ustawień – przykładowej animacji obejmującej różne działania.
- Na poprzednim ekranie użytkownik zaczyna drugi raz przesuwać palcem wstecz, wyświetlając podgląd ekranu głównego z tapetą – przykładem animacji przejścia na ekran główny.
- Użytkownik nadal przesuwa w prawo, pokazując animację okna kurczącego się do ikony na ekranie głównym.
- Użytkownik wrócił w pełni do ekranu głównego.
Dowiedz się więcej o tym, jak dodać obsługę przewidywania gestów cofania.
Dodawanie niestandardowych przejść i animacji w aplikacji
Możesz tworzyć niestandardowe animacje i przejścia usługi w aplikacji, niestandardowe animacje dla różnych aktywności oraz niestandardowe animacje złożone z fragmentów aktywności przy użyciu gestów prognostycznych.
Dodawanie niestandardowych przejść za pomocą interfejsu Progress API
W aplikacji AndroidX Activity w wersji 1.8.0-alfa01 lub nowszej możesz używać interfejsów Predictive Back Progress API, aby tworzyć niestandardowe animacje dla gestu cofania się w aplikacji. Interfejsy API postępu ułatwiają animowanie widoków, ale animowanie przejść między fragmentami ma pewne ograniczenia. W narzędziu OnBackPressedCallback
wprowadziliśmy metody handleOnBackProgressed
, handleOnBackCancelled
i handleOnBackStarted
, które umożliwiają animowanie obiektów, gdy użytkownik przesuwa palcem do tyłu. Użyj tych metod, jeśli chcesz dostosować inne elementy niż domyślne animacje udostępniane przez system lub animacje komponentu Material.
Spodziewamy się, że większość aplikacji będzie korzystać ze zgodnych wstecznie interfejsów API AndroidX, ale w interfejsie OnBackAnimationCallback
dostępne są również podobne interfejsy API platformy, które można przetestować w wersji przedpremierowej dla programistów Androida 14 w wersji 1 lub nowszej.
Korzystanie z interfejsów Progress API w przypadku przejść z AndroidemX
Interfejsów Progress API można używać z przejściami z AndroidX w wersji 1.5.0-alpha01 lub nowszej na Androidzie 14 i nowszych, do tworzenia przewidywań przejścia wstecz.
- Do odtwarzania przejść, gdy użytkownik przesuwa do tyłu, używaj
TransitionManager#controlDelayedTransition
zamiastbeginDelayedTransition
. - Utwórz przejście w usłudze
handleOnBackStarted
. - Odtwarzaj przejście ze zdarzeniem wstecz w obrębie elementu
handleOnBackProgressed
, wiążąc elementcurrentFraction
z elementemBackEvent.progress
, który pokazuje, jak daleko użytkownik przesunął się do tyłu. - Zakończ przejście, gdy użytkownik potwierdzi gest cofania w
handleOnBackPressed
. - Na koniec zresetuj stan przejścia w usłudze
handleOnBackCancelled
.
Ten film oraz kod Kotlin i kod XML pokazują niestandardowe przejście między dwoma polami zaimplementowanymi za pomocą 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 prognozowanym przejściem wstecznym pamiętaj o tych kwestiach:
- Użyj funkcji
isSeekingSupported
, aby sprawdzić, czy przejście obsługuje funkcję przewidywania Wstecz. - Zastąp
isSeekingSupported
, aby niestandardowych przejściach zwracać wartość „prawda”. - Utwórz po 1 kontrolerze na animację.
- Przewidywane przejścia wstecz są obsługiwane w przypadku przejścia z AndroidaX, ale nie w przypadku przejścia na inną platformę. Zalecamy więc odstąpienie od przejścia z przejścia na platformę.
- Przewidywane przejścia wstecz są obsługiwane na urządzeniach z Androidem 14 lub nowszym i nie są zgodne wstecznie.
- Przejścia utworzone przy użyciu scen XML również są obsługiwane. W
handleOnBackStarted
ustawTransitionSeekController
na wynikTransitionManager.createSeekController
zamiast nacontrolDelayedTransition
.
Dodawanie niestandardowych przeniesień aktywności na Androidzie 14 i nowszych
Aby mieć pewność, że niestandardowe przeniesienia związane z aktywnością obsługują funkcję przewidywania wstecznej na Androidzie 14 i nowszych, możesz użyć overrideActivityTransition
zamiast overridePendingTransition
. Oznacza to, że animacja przejścia
będzie się odtwarzać, gdy użytkownik przesunie palcem do tyłu.
Aby to sprawdzić, wyobraźmy sobie scenariusz, w którym Działanie B znajduje się nad aktywnością A z tyłu. Niestandardowe animacje aktywności działają w taki sposób:
- Wywołaj przejście otwierające lub zamykające w ramach metody
onCreate
w aktywności B. - Gdy użytkownik przejdzie do Aktywności B, użyj polecenia
OVERRIDE_TRANSITION_OPEN
. Gdy użytkownik przesunie palcem po ekranie, aby wrócić do aktywności A, użyj funkcjiOVERRIDE_TRANSITION_CLOSE
. Przy określaniu
OVERRIDE_TRANSITION_CLOSE
elemententerAnim
oznacza animację wejścia aktywności A, aexitAnim
to animacja wyjścia aktywności B.
Dodanie obsługi prognozowania wstecznego z fragmentami
Istnieją 2 sposoby implementowania prognozowania zwrotnego z fragmentami.
Użyj istniejących interfejsów API
Zalecamy korzystanie z istniejących interfejsów API. Te interfejsy API pozwalają sterować przejściami w animatorze lub Androidziex za pomocą gestów, przesuwając palcem od krawędzi ekranu. Niezależnie od tego, czy ruch zostanie przekroczony przez próg, określa to, czy został on ukończony i powrócisz do poprzedniego fragmentu, czy też zostanie anulowany i pozostanie przy bieżącym fragmencie. Więcej informacji znajdziesz w artykule o nawigowaniu między fragmentami za pomocą animacji.
Pamiętaj o tych kwestiach:
- Zaimportuj przejścia w wersji 1.5.0 lub nowszej oraz fragmenty w wersji 1.7.0 lub nowszej. Znaczna część predykcyjnego wsparcia zwrotnego w fragmentach kodu zależy od tego, że przejścia mogą przewijać animacje, co jest możliwe tylko w przejściach w wersji 1.5.0 i nowszych.
- Do obsługi stosu wstecznego używaj fragmentów z
FragmentManager
lub komponentem Nawigacja. Przewidywanie wsteczne nie jest obsługiwane, jeśli zarządzasz własnym stosem wstecznym. - Niektóre biblioteki obsługują funkcję predykcyjnej pleców. Dla pewności przejrzyj dokumentację.
- Obsługiwane są klasa
Animator
i bibliotekaAndroidX Transition
. - Biblioteka klas
Animation
i bibliotekaTransition
nie są obsługiwane. - Animacje prognozowane działają tylko na urządzeniach z Androidem 14 lub nowszym.
Korzystaj z funkcji przewidywania fragmentów w tle w tych sytuacjach:
- Utwórz animację komponentu nawigacji.
- Animuj za pomocą:
setCustomAnimations
. - Animuj przejścia między wejściami i wyjściami za pomocą metod
setEnterTransition
,setExitTransition
,setReenterTransition
isetReturnTransition
. - Animuj przejścia elementów udostępnionych za pomocą
setSharedElementEnterTransition
isetSharedElementReturnTransition
.
Niektóre ruchy materialne obsługują prognozowanie wstecz od 1.12.02-alfa02 lub nowszego, w tym MaterialFadeThrough
, MaterialSharedAxis
i MaterialFade
. Pamiętaj, że funkcja MaterialContainerTransform
nie obsługuje przewidywania wstecznego.
Korzystanie z wywołań zwrotnych
Możesz utworzyć przejście między fragmentami za pomocą wywołań zwrotnych, ale w przypadku korzystania z wywołań zwrotnych istnieje ryzyko, że użytkownicy nie widzą poprzedniego fragmentu po przesunięciu palcem do tyłu. Aby utworzyć przejście we wspólnych elementach z wielu fragmentów zgodne ze wskazówkami dotyczącymi projektowania prognozującego wstecz, wykonaj te czynności:
Utwórz OnBackPressedCallback
. W elemencie handleOnBackProgressed
przeskaluj i przesuń fragment. Potem wyskocz z tylnego stosu. Następnie uruchom przejście udostępnianego elementu za pomocą polecenia setSharedElementReturnTransition
poza wywołaniem zwrotnym.
Więcej informacji znajdziesz w przykładowym kodzie na GitHubie.
Wymagania
Z tabel poniżej dowiesz się, czym sterują opcje programisty (targetSdkVersion
i compileSdkVersion
, wersja urządzenia, zależności, flagi manifestu oraz flagi fragmentu). Pierwsza tabela dotyczy wymagań kodu.
Kategoria | Animacja | buildSdk | docelowy pakiet SDK | android:enableOnBackInvokedCallback, | Zależność |
---|---|---|---|---|---|
Animacje systemowe | Powrót do domu | 33 | Dowolny | PRAWDA | Brak |
Wzajemna aktywność | 34 | Dowolny | PRAWDA | Brak | |
Wielozadaniowość | 34 | Dowolny | PRAWDA | Brak | |
Platforma | Niestandardowa aktywność krzyżowa | 34 | Dowolny | PRAWDA | Brak |
Platforma interfejsu Progress API | 34 | Dowolny | PRAWDA | Brak | |
Składniki materiałowe | Plansza dolna | 34 | Dowolny | PRAWDA | Material Komponent 1.10.0 |
Arkusz boczny | 34 | Dowolny | PRAWDA | Material Komponent 1.10.0 | |
Panel nawigacji | 34 | Dowolny | PRAWDA | Material Komponent 1.10.0 | |
Szukaj | 34 | Dowolny | PRAWDA | Material Komponent 1.10.0 | |
Animacje Jetpack | Niestandardowy fragment o wielu fragmentach w AndroidzieX | 34 | Dowolny | PRAWDA | Fragment AndroidaX 1.7 |
Niestandardowe przejścia z AndroidaX | 34 | Dowolny | PRAWDA | AndroidX Przenoszenie 1.5 | |
Jetpack z interfejsem Progress API | 34 | Dowolny | PRAWDA | Aktywność w Androidzie 1.8 |
Tabela poniżej zawiera wymagania, które pozwalają użytkownikom oglądać animacje.
Kategoria | Animacja | Opcja programisty włączona | Wersja urządzenia |
---|---|---|---|
Animacje systemowe | Powrót do domu | PRAWDA | 33 |
Wzajemna aktywność | PRAWDA | 34 | |
Wielozadaniowość | PRAWDA | 34 | |
Platforma | Niestandardowa aktywność krzyżowa | PRAWDA | 34 |
Platforma interfejsu Progress API | FAŁSZ | 34 | |
Składniki materiałowe | Plansza dolna | FAŁSZ | 34 |
Arkusz boczny | FAŁSZ | 34 | |
Panel nawigacji | FAŁSZ | 34 | |
Szukaj | FAŁSZ | 34 | |
Animacje Jetpack | Niestandardowy fragment o wielu fragmentach w AndroidzieX | FAŁSZ | 34 |
Niestandardowe przejścia z AndroidaX | FAŁSZ | 34 | |
Jetpack z interfejsem Progress API | FAŁSZ | 34 |
Dodatkowe materiały
- Przykłady kodu prognozowanego
- Podstawy tworzenia obrazu wstecznego systemu
- Tworzenie filmów na temat przyszłości Androida