Podczas korzystania z interfejsów API systemu możesz wyrazić zgodę na wyświetlanie animacji w aplikacji i obsługę niestandardowych przejść.
Po włączeniu tej opcji aplikacja będzie wyświetlać animacje w przypadku powrotu do ekranu głównego, przełączania aktywności i przełączania zadań.
Możesz też zaktualizować zależność komponentu Material Design do wersji 1.10.0 MDC na Androida, aby uzyskać animacje komponentów Material Design, takie jak:
Więcej informacji znajdziesz w wskazówkach dla programistów komponentów treści na GitHubie.
Film pokazuje krótki przykład przewidujących animacji powrotu w ramach aktywności i powrotu do ekranu głównego w aplikacji Ustawienia na Androidzie.
- 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 przesuwa palcem w prawo, co powoduje animację okna, które zmniejsza się do ikony na ekranie głównym.
- Użytkownik wrócił w pełni do ekranu głównego.
Dowiedz się więcej o dodawaniu obsługi przewidujących gestów wstecz.
Dodawanie niestandardowych przejść i animacji w aplikacji
Możesz tworzyć niestandardowe animacje i przejścia w usłudze w aplikacji, niestandardowe animacje między aktywnościami oraz niestandardowe animacje między fragmentami z wykorzystaniem przewidujących gestów wstecz.
Dodawanie niestandardowych przejść za pomocą interfejsu Progress API
W wersji Activity 1.8.0-alpha01 lub nowszej z AndroidX możesz używać interfejsów API Progresywny przewidujący powrót, aby tworzyć niestandardowe animacje dla przewidującego powrotu gestów w aplikacji. Interfejsy API Progresywny są przydatne przy animowaniu widoków, ale mają ograniczenia w animowaniu przejść między fragmentami. W narzędziu OnBackPressedCallback
wprowadziliśmy metody handleOnBackProgressed
, handleOnBackCancelled
i handleOnBackStarted
, które umożliwiają animowanie obiektów za pomocą przesuwania palcem do tyłu. Użyj tych metod, jeśli chcesz dostosować coś więcej niż domyślne animacje udostępniane przez system lub animacje komponentów Material.
Spodziewamy się, że większość aplikacji będzie używać interfejsów API AndroidX, które są zgodne wstecznie. Jednak w interfejsie OnBackAnimationCallback
dostępne są też podobne interfejsy API platformy, które można testować w wersji Androida 14 w wersji na potrzeby programistów 1 lub nowszej.
Korzystanie z interfejsów Progress API w ramach AndroidX Transitions
Interfejsy Progress API można używać z AndroidX Transitions w wersji 1.5.0-alpha01 lub nowszej na Androidzie 14 i nowszych, aby tworzyć przejścia wstecz z wykorzystaniem przewidywania.
- Do odtwarzania przejść, gdy użytkownik przesuwa do tyłu, używaj
TransitionManager#controlDelayedTransition
zamiastbeginDelayedTransition
. - Utwórz przejście w
handleOnBackStarted
. - Odtwórz przejście za pomocą zdarzenia wstecz w komponentach
handleOnBackProgressed
, odnosząccurrentFraction
doBackEvent.progress
, co pokazuje, jak daleko użytkownik przesunął palcem w dół. - Zakończ przejście, gdy użytkownik wykona gest wstecz w aplikacji
handleOnBackPressed
. - Na koniec zresetuj stan przejścia w
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 korzystania z przejść prognozowanego powrotu pamiętaj o tych kwestiach:
- Użyj
isSeekingSupported
, aby sprawdzić, czy przejście obsługuje funkcję przewidywania wstecz. - Użyj override
isSeekingSupported
, aby zwrócić wartość true dla niestandardowych przejść. - Utwórz 1 kontroler na animację.
- Przewidywane przejścia wstecz są obsługiwane w przypadku przejścia z AndroidaX, ale nie w przypadku przejścia na inną platformę. Zrezygnuj z przejść frameworka i zamiast nich używaj przejść
Animator
i AndroidX. - Przejścia z przewidywaniem wstecz są obsługiwane na urządzeniach z Androidem 14 lub nowszym i nie są zgodne z wstecz.
- Przejścia utworzone przy użyciu scen XML również są obsługiwane. W funkcji
handleOnBackStarted
ustaw argumentTransitionSeekController
na wartość zwracaną przez funkcjęTransitionManager.createSeekController
, a nie przez funkcjęcontrolDelayedTransition
.
Dodawanie przejść między aktywnościami niestandardowymi w Androidzie 14 i nowszych
Aby mieć pewność, że niestandardowe przejścia między aktywnościami będą obsługiwać funkcję przewidywanego powrotu na Androidzie 14 i nowszych wersjach, zamiast overridePendingTransition
możesz użyć overrideActivityTransition
. Oznacza to, że animacja przejścia jest odtwarzana, gdy użytkownik przesuwa palcem w lewo.
Aby pokazać, jak to działa, wyobraź sobie sytuację, w której aktywność B znajduje się nad aktywnością A w steku. W przypadku animacji aktywności niestandardowych należy postępować w ten sposób:
- Wywołuj otwieranie lub zamykanie przejść w metodie
onCreate
w ramach aktywności B. - Gdy użytkownik przechodzi do aktywności B, użyj
OVERRIDE_TRANSITION_OPEN
. Gdy użytkownik przesunie palcem, aby wrócić do czynności A, użyj elementuOVERRIDE_TRANSITION_CLOSE
. W przypadku parametru
OVERRIDE_TRANSITION_CLOSE
wartośćenterAnim
to animacja wejścia aktywności A, a wartośćexitAnim
to animacja wyjścia z aktywności B.
Dodanie obsługi przewidywanego przejścia wstecz z użyciem fragmentów
Wdrożenie przewidywanego przywracania za pomocą fragmentów może odbywać się na 2 sposoby.
Korzystanie z dotychczasowych 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. To, czy gest zostanie wykonany i czy wrócisz do poprzedniego fragmentu, czy zostanie anulowany i pozostaniesz na bieżącym fragmencie, zależy od tego, czy gest zostanie wykonany i czy wrócisz do poprzedniego fragmentu, czy zostanie anulowany i pozostaniesz na 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ą oraz Fragments 1.7.0 lub nowszą. Większość obsługi przewidywanego cofnięcia w Fragments opiera się na możliwości Transitions do przewijania animacji, co jest możliwe tylko w Transitions w wersji 1.5.0 lub nowszej.
- Do obsługi sekcji Wstecz użyj fragmentów (
FragmentManager
) lub komponentu Nawigacja. Przewidywanie wsteczne nie jest obsługiwane, jeśli zarządzasz własnym stosem wstecznym. Przejdź do podprocesów z poziomu warstwy pośredniej, o którychFragmentManager
nie wie. - Niektóre biblioteki obsługują funkcję przewidywanego cofnięcia. Dla pewności przejrzyj dokumentację.
- Obsługiwane są biblioteki
Animator
iAndroidX Transition
. - Klasa
Animation
i bibliotekaTransition
nie są obsługiwane. - Animacje predykcyjne działają tylko na urządzeniach z Androidem w wersji 14 lub nowszej.
Korzystaj z funkcji przewidywania fragmentów w tle w tych sytuacjach:
- Animuj komponent nawigacji.
- Twórz animacje za pomocą aplikacji
setCustomAnimations
. - Animuj przejścia między wejściami i wyjściami za pomocą metod
setEnterTransition
,setExitTransition
,setReenterTransition
isetReturnTransition
. - Animuj przejścia współdzielonych elementów za pomocą elementów
setSharedElementEnterTransition
isetSharedElementReturnTransition
.
Niektóre material motions
obsługują funkcję przewidywania wstecz w wersji
1.12.02-alpha02
lub nowszej, w tym MaterialFadeThrough
, MaterialSharedAxis
i
MaterialFade
. Uwaga: aplikacja MaterialContainerTransform
nie obsługuje funkcji prognozowania opinii.
Używanie wywołań zwrotnych
Za pomocą wywołań zwrotnych możesz tworzyć przejścia między fragmentami, ale jest też znane ograniczenie dotyczące używania wywołań zwrotnych, które polega na tym, że użytkownicy nie mogą zobaczyć poprzedniego fragmentu po przesunięciu palcem w drugą stronę. Aby utworzyć przejście między elementami współdzielonymi w różnych fragmentach, które odpowiada zaleceniom projektowym dotyczącym przewidywania:
Utwórz OnBackPressedCallback
. W elemencie handleOnBackProgressed
przeskaluj i przesuń fragment. Następnie wyjmij z grupy elementów. Następnie uruchom przejście elementu współdzielonego za pomocą funkcji setSharedElementReturnTransition
poza wywołaniem zwrotnym.
Więcej informacji znajdziesz w przykładowym kodzie na GitHubie.
Wymagania
Z tabeli poniżej dowiesz się, co jest kontrolowane przez targetSdkVersion
i compileSdkVersion
, wersję urządzenia, zależności, flagi manifestu i flagi fragmentu. Ta tabela odnosi się do wymagań dotyczących kodu.
Kategoria | Animacja | buildSdk | targetSdk | Wersja urządzenia | android:enableOnBackInvokedCallback | Zależność |
---|---|---|---|---|---|---|
Animacje systemowe | Powrót do domu | 33 | Dowolny | 35 | PRAWDA | Brak |
Aktywność na wielu platformach | 34 | Dowolny | 35 | PRAWDA | Brak | |
Wielozadaniowość | 34 | Dowolny | 35 | PRAWDA | Brak | |
Platforma | Niestandardowa aktywność krzyżowa | 34 | Dowolny | 35 | PRAWDA | Brak |
Progress API Platform | 34 | Dowolny | 34 | PRAWDA | Brak | |
Material Components | Plansza dolna | 34 | Dowolny | 34 | PRAWDA | Komponent materiału 1.10.0 |
Arkusz boczny | 34 | Dowolny | 34 | PRAWDA | Material Komponent 1.10.0 | |
Panel nawigacji | 34 | Dowolny | 34 | PRAWDA | Komponent materiału 1.10.0 | |
Szukaj | 34 | Dowolny | 34 | PRAWDA | Komponent materiału 1.10.0 | |
Jetpack Animations | Niestandardowy fragment krzyżowy AndroidX | 34 | Dowolny | 34 | PRAWDA | AndroidX Fragment 1.7 |
Niestandardowe przejścia AndroidX | 34 | Dowolny | 34 | PRAWDA | AndroidX Przenoszenie 1.5 | |
Jetpack API postępu | 34 | Dowolny | 34 | PRAWDA | AndroidX Activity 1.8 |
Dodatkowe materiały
- Przykładowy kod wsteczny prognozujący
- Podstawy dotyczące filmów z tyłu pojazdu
- Tworzenie przyszłości filmów na Androidzie