Korzystając z systemowych interfejsów API, możesz wyrazić zgodę na otrzymywanie animacji w aplikacji i obsługiwać niestandardowe przejścia.
Gdy włączysz tę funkcję, aplikacja będzie wyświetlać animacje powrotu do ekranu głównego, różnych działań i różnych zadań.
Możesz też uaktualnić zależność komponentu Material Design do wersji 1.10.0 MDC na Androida, aby otrzymywać animacje komponentów materiału podobne do tych:
Więcej informacji znajdziesz we wskazówkach dla deweloperów komponentów Material Design na GitHubie.
Na filmie widać krótki przykład animacji przewidywanego przejścia wstecz w przypadku różnych aktywności i powrotu do domu za pomocą aplikacji Ustawienia na Androidzie.
- W animacji użytkownik przesuwa palcem, aby wrócić do poprzedniego ekranu ustawień – przykładu animacji obejmującej różne działania.
- Na poprzednim ekranie użytkownik zaczyna przesuwać raz do tyłu, pokazując podgląd ekranu głównego z jej tapetą, co jest przykładem animacji powrotu do ekranu głównego.
- Użytkownik kontynuuje przesuwanie palcem w prawo, wyświetlając animację okna zmniejszającego się do ikony na ekranie głównym.
- Użytkownik wrócił teraz do ekranu głównego.
Dowiedz się więcej o obsłudze gestów odczytywanych przez cofanie się.
Dodaj niestandardowe przejścia i animacje w aplikacji
Możesz tworzyć niestandardowe animacje i przejścia właściwości w aplikacji, niestandardowe animacje obejmujące różne działania oraz niestandardowe animacje fragmentów krzyżowych z użyciem gestów wstecznych.
Dodaj niestandardowe przejścia za pomocą interfejsu Progress API
Dzięki aktywności w AndroidzieX w wersji 1.8.0-alfa01 lub nowszej możesz używać interfejsów Predictive Back Progress API, by tworzyć niestandardowe animacje dla gestu przewidywania wstecznego w aplikacji. W obrębie OnBackPressedCallback
wprowadziliśmy metody handleOnBackProgressed
, handleOnBackCancelled
i handleOnBackStarted
do animowania obiektów podczas przesuwania palcem do tyłu. Użyj tych metod, jeśli chcesz dostosować więcej animacji niż domyślne animacje dostarczone przez system lub animacje komponentu Materiał.
Spodziewamy się, że większość aplikacji będzie używać zgodnych wstecznie interfejsów API AndroidaX, ale w interfejsie OnBackAnimationCallback
dostępne są też podobne interfejsy API platformy do testowania w wersji przedpremierowej 1 dla programistów Androida 14 i nowszych.
Korzystanie z interfejsów Progress API w ramach przejścia na AndroidaX
Interfejsów Progress API można używać z przejściami z Androidem 1.5.0-alfa01 lub nowszym na Androidzie 14 i nowszych, aby tworzyć przejścia z wyprzedzeniem.
- Aby odtwarzać przejścia, gdy użytkownik przesuwa palcem do tyłu, użyj narzędzia
TransitionManager#controlDelayedTransition
zamiastbeginDelayedTransition
. - Utwórz przejście w ciągu
handleOnBackStarted
. - Odtwórz przejście za pomocą zdarzenia wstecz w obrębie
handleOnBackProgressed
, przypisując parametrcurrentFraction
doBackEvent.progress
, który pokazuje, jak daleko użytkownik przesunął się do tyłu. - Dokończ przenoszenie, gdy użytkownik potwierdzi gest cofania w
handleOnBackPressed
. - Na koniec zresetuj stan przejścia w ciągu
handleOnBackCancelled
.
W tym filmie, kodzie Kotlin i w formacie XML pokazano niestandardowe przejście między 2 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 przejściami typu przewidywanie wsteczne pamiętaj o tych kwestiach:
- Użyj funkcji
isSeekingSupported
, aby sprawdzić, czy przejście obsługuje funkcję przewidywania wstecznego. - Zastąp
isSeekingSupported
, aby zwracać wartość „prawda” w przypadku niestandardowych przejść. - Utwórz po 1 kontrolerze na animację.
- Przejścia z wyprzedzeniem są obsługiwane w przypadku przejścia na AndroidaX, ale nie w przypadku przejścia na platformę. Zalecamy przejście z innych platform.
- Przewidywanie przejścia do tyłu jest obsługiwane na urządzeniach z Androidem 14 lub nowszym i nie jest zgodne wstecznie.
- Przejścia utworzone za pomocą scen XML są również obsługiwane. W funkcji
handleOnBackStarted
ustawTransitionSeekController
na wynikTransitionManager.createSeekController
, a niecontrolDelayedTransition
.
Dodawanie niestandardowych przeniesień aktywności w Androidzie 14 i nowszych
Aby niestandardowe przenoszenie aktywności obsługiwało funkcję przewidywania wstecznego na Androidzie 14 i nowszych, możesz użyć overrideActivityTransition
zamiast overridePendingTransition
. Oznacza to, że animacja przejścia
odtwarza się, gdy użytkownik przesuwa do tyłu.
Aby podać przykład, jak to może działać, wyobraźmy sobie scenariusz, w którym Działanie B jest nadrzędne dla Aktywności A w stosie wstecznym. W takim przypadku postępujesz z niestandardowymi animacjami aktywności w taki sposób:
- Wywołaj przejście w ramach metody
onCreate
działania B. - Gdy użytkownik przejdzie 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 właściwość
OVERRIDE_TRANSITION_CLOSE
,enterAnim
będzie animacją wejścia dla działania A, aexitAnim
to animacja wyjściowa działania B.
Dodano obsługę funkcji przewidującego powrotu z fragmentami
W przypadku implementowania funkcji prognozowania powrotu z fragmentami można skorzystać na 2 sposoby:
Użyj istniejących interfejsów API
Zalecamy użycie istniejących interfejsów API. Te interfejsy API pozwalają przesuwać palcem od krawędzi ekranu, aby manipulować przejściami w animatorze lub Androidziex za pomocą gestów. To, czy gest przekracza próg, decyduje o tym, czy został on zakończony i wrócisz do poprzedniego fragmentu, czy też zostanie on anulowany i pozostaniesz przy bieżącym fragmencie. Więcej informacji znajdziesz w artykule Poruszanie się między fragmentami przy użyciu animacji.
Pamiętaj o tych kwestiach:
- Zaimportuj przejścia 1.5.0 lub nowsze i Fragmenty w wersji 1.7.0 lub późniejsze. Duża część predykcyjnej obsługi wstecznej w elementach Fragments polega na tym, że przejścia mogą wyszukiwać animacje, co jest możliwe tylko w Przejściach 1.5.0 i nowszych.
- Do obsługi stosu wstecznego używaj obiektów Fragmenty z elementem
FragmentManager
lub komponentem nawigacji. Przewidywanie wsteczne nie jest obsługiwane, jeśli zarządzasz własnym stosem wstecznym. - Niektóre biblioteki obejmują obsługę funkcji prognozowania wstecznej. Dla pewności sprawdź dokumentację.
- Obsługiwane są klasa
Animator
i bibliotekaAndroidX Transition
. - Biblioteka klas
Animation
i platformyTransition
nie jest obsługiwana. - Animacje prognozowane działają tylko na urządzeniach z Androidem 14 lub nowszym.
Stosuj prognozujące fragmenty wsteczne w tych sytuacjach:
- Utwórz animację komponentu nawigacji.
- Animuj za pomocą:
setCustomAnimations
. - Animuj przejścia między wejściami i wyjściami za pomocą funkcji
setEnterTransition
,setExitTransition
,setReenterTransition
isetReturnTransition
. - Animuj przejścia udostępnionych elementów za pomocą narzędzi
setSharedElementEnterTransition
isetSharedElementReturnTransition
.
Niektóre materialne ruchy obsługują przewidywanie wsteczne od 1.12.02-alfa02 lub nowsze, w tym MaterialFadeThrough
, MaterialSharedAxis
i MaterialFade
. Uwaga: 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 wywołań zwrotnych, które powodują, że użytkownicy nie widzą poprzedniego fragmentu po przesunięciu do tyłu, jest znane ograniczenie. Aby utworzyć przejście elementów współdzielonych między fragmentami, które odpowiada wskazówkom dotyczącym projektowania przewidywania wstecznego, wykonaj te czynności:
Utwórz OnBackPressedCallback
. W handleOnBackProgressed
skaluj i przesuń fragment. Następnie wystań ze stosu tylnego. 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 tabel poniżej dowiesz się, co są kontrolowane przez opcje programisty (targetSdkVersion
i compileSdkVersion
, wersję urządzenia, zależności, flagi manifestu oraz flagi fragmentów). Pierwsza tabela odnosi się do wymagań dotyczących kodu.
Kategoria | Animacja | ComputeSdk | docelowy pakiet SDK | android:enableOnBackInvokedCallback | Zależność |
---|---|---|---|---|---|
Animacje systemowe | Powrót do domu | 33 | Dowolna | PRAWDA | Brak |
Wzajemna aktywność | 34 | Dowolna | PRAWDA | Brak | |
Wielozadaniowość | 34 | Dowolna | PRAWDA | Brak | |
Platforma | Niestandardowa interaktywność | 34 | Dowolna | PRAWDA | Brak |
Platforma Progress API | 34 | Dowolna | PRAWDA | Brak | |
Komponenty | Plansza dolna | 34 | Dowolna | PRAWDA | Komponent Material 1.10.0 |
Arkusz boczny | 34 | Dowolna | PRAWDA | Komponent Material 1.10.0 | |
Panel nawigacji | 34 | Dowolna | PRAWDA | Komponent Material 1.10.0 | |
Szukaj | 34 | Dowolna | PRAWDA | Komponent Material 1.10.0 | |
Animacje z jetpackiem | Niestandardowy fragment kodu AndroidX | 34 | Dowolna | PRAWDA | AndroidX Fragment 1.7 |
Niestandardowe przejścia na AndroidaX | 34 | Dowolna | PRAWDA | AndroidX – przejście na wersję 1.5 | |
Jetpack – Progress API | 34 | Dowolna | PRAWDA | AndroidX Aktywność 1.8 |
W tabeli poniżej znajdziesz wymagania, które umożliwiają użytkownikom wyświetlanie animacji.
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 interaktywność | PRAWDA | 34 |
Platforma Progress API | FAŁSZ | 34 | |
Komponenty | Plansza dolna | FAŁSZ | 34 |
Arkusz boczny | FAŁSZ | 34 | |
Panel nawigacji | FAŁSZ | 34 | |
Szukaj | FAŁSZ | 34 | |
Animacje z jetpackiem | Niestandardowy fragment kodu AndroidX | FAŁSZ | 34 |
Niestandardowe przejścia na AndroidaX | FAŁSZ | 34 | |
Jetpack – Progress API | FAŁSZ | 34 |