Podczas korzystania z systemowych interfejsów API, możesz wyrazić zgodę na otrzymywanie animacji w aplikacji i obsługują niestandardowe przejścia.
Gdy włączysz tę funkcję, aplikacja będzie wyświetlać animacje powrót do strony głównej, i wielozadaniowość.
Możesz też uaktualnić zależność komponentów Material Design do wersji 1.10.0 MDC Android może odbierać animacje komponentu Materiał, takie jak:
Zapoznaj się ze wskazówkami dla deweloperów dotyczącymi komponentów materiałów na GitHubie, znajdziesz więcej informacji.
Film przedstawia krótki przykład animacji przejścia wstecz w przypadku do wielu aktywności i powrót do domu w aplikacji Ustawienia na Androidzie.
- W animacji użytkownik przesuwa palcem z powrotem, aby wrócić do poprzednich ustawień. screen – przykład animacji przedstawiającej różne aktywności.
- Na poprzednim ekranie użytkownik zaczyna przesuwać palcem po raz drugi, podgląd ekranu głównego z tapetą (przykład: animację powrotu na stronę główną.
- Użytkownik nadal przesuwa w prawo, pokazując animację okna. zmniejsza 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 w aplikacji, niestandardowe animacje obejmujące różne aktywności i niestandardowe animacje złożone z fragmentów o funkcji predykcyjnej gestami wstecz.
Dodawanie niestandardowych przejść za pomocą interfejsu Progress API
W AndroidX Activity w wersji 1.8.0-alfa01 lub nowszej możesz używać funkcji przewidywania
Interfejsy API postępu umożliwiające tworzenie niestandardowych animacji
gestu przewidywania tekstu wstecz w aplikacji. Interfejsy API postępu pomagają animować
widoków, ale mają ograniczenia związane z animowaniem przejść między fragmentami. W ciągu
OnBackPressedCallback
wprowadziliśmy
handleOnBackProgressed
,
handleOnBackCancelled
oraz
handleOnBackStarted
metody animowania obiektów, gdy użytkownik przesuwa palcem do tyłu. Skorzystaj z tych metod, jeśli:
chcesz dostosować bardziej niż domyślne animacje udostępniane przez system.
animacje komponentu Material.
Spodziewamy się, że większość aplikacji będzie korzystać ze zgodnych wstecznie interfejsów API AndroidaX, ale
także interfejsami API podobnych platform w ramach
OnBackAnimationCallback
interfejs dostępny do testowania 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 AndroidX Migrates w wersji 1.5.0-alpha01 lub nowszej w Androidzie 14 i nowszych, aby tworzyć przewidywane przejścia wstecz.
- Użyj
TransitionManager#controlDelayedTransition
zamiastbeginDelayedTransition
, aby odtwarzać przejścia jako: użytkownik przesunie palcem do tyłu. - Utwórz przejście w usłudze
handleOnBackStarted
. - Odtwórz przejście ze zdarzeniem wstecz w ciągu
handleOnBackProgressed
do dotyczące:currentFraction
iBackEvent.progress
, co pokazuje, jak daleko użytkownik przesunął palcem do tyłu. - Zakończ przenoszenie po zatwierdzeniu gestu cofania przez użytkownika
handleOnBackPressed
- Na koniec zresetuj stan przejścia w usłudze
handleOnBackCancelled
.
Niestandardowe przejście pokazano w poniższym filmie, kodzie Kotlin i XML
między dwoma polami zaimplementowanymi za pomocą algorytmu 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 w AndroidzieX, ale nie w przypadku przejścia na nową platformę. Zalecamy odejście od platformy przejścia.
- Przewidywanie przejścia wstecz jest obsługiwane na urządzeniach z Androidem 14 oraz 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 wynikucontrolDelayedTransition
.
Dodawanie niestandardowych przeniesień aktywności na Androidzie 14 i nowszych
Aby mieć pewność, że niestandardowe przenoszenie aktywności będzie obsługiwać funkcję przewidywania zmian w Androidzie 14
lub wyższej, możesz używać overrideActivityTransition
zamiast
overridePendingTransition
Oznacza to, że animacja przejścia jest odtwarzana jako
użytkownik przesunie palcem do tyłu.
Aby podać przykład, jak to może działać, wyobraźmy sobie scenariusz, w którym Ćwiczenie B znajduje się nad Aktywnością A z tyłu. Zajmujesz się personalizacją Animacje aktywności:
- Wywołaj przejścia otwierające lub zamykające w
onCreate
aktywności B. . - Gdy użytkownik przejdzie do Aktywności B, użyj polecenia
OVERRIDE_TRANSITION_OPEN
. Kiedy użytkownik przesuwa palcem, aby wrócić do aktywności A, użyjOVERRIDE_TRANSITION_CLOSE
Przy określaniu
OVERRIDE_TRANSITION_CLOSE
enterAnim
jest aktywności A wprowadź animację, 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 umożliwiają przechodzenie aby manipulować przejściami w animatorze lub Androidziex za pomocą przycisku gest. To, czy przekroczysz próg, decyduje o tym, zakończy się i nastąpi powrót do poprzedniego fragmentu. Ewentualnie następuje anulowanie na obecnym fragmencie. Więcej informacji: Poruszaj się po fragmentach za pomocą animacji.
Pamiętaj o tych kwestiach:
- Importuj Przejścia 1.5.0 lub później i Fragmenty 1.7.0 czy później. Znaczna część predykcyjnego wsparcia pierwiastka w przypadku fragmentów kodu zależy od Przejścia mogą przewijać animacje, co jest możliwe tylko w Przejścia w wersji 1.5.0 lub nowszej.
- Używaj fragmentów z parametrem
FragmentManager
lub Komponent nawigacyjny służący do obsługi stosu wstecznego. Przewidujące Powrót nie jest obsługiwany, jeśli zarządzasz własnym stosem wstecznym. - Niektóre biblioteki obsługują funkcję predykcyjnej pleców. Sprawdź dokumentację, która ma być jasne.
- zajęcia
Animator
orazAndroidX Transition
biblioteka jest obsługiwane. - 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ą funkcji
setEnterTransition
,setExitTransition
,setReenterTransition
isetReturnTransition
. - Animuj przejścia elementów udostępnionych za pomocą:
setSharedElementEnterTransition
orazsetSharedElementReturnTransition
Niektóre ruchy materiału
i obsługują prognozowanie wsteczne od
1.12.02-alfa02
lub wyższe, w tym MaterialFadeThrough
, MaterialSharedAxis
i
MaterialFade
Uwaga: MaterialContainerTransform
nie obsługuje prognozowania
z powrotem.
Korzystanie z wywołań zwrotnych
Można utworzyć przejście między fragmentami za pomocą wywołań zwrotnych, ale istnieje znane ograniczenie w przypadku używania wywołań zwrotnych, w których użytkownicy nie widzą poprzedniego fragment po przesuwaniu do tyłu. Aby utworzyć przejście udostępnianych elementów z wielu fragmentów która odpowiada przewidywanej wstecznej wskazówek dotyczących projektowania, :
Utwórz OnBackPressedCallback
. W obrębie handleOnBackProgressed
skaluj
przesuń fragment. Potem wyskocz z tylnego stosu. Następnie uruchom udostępniony element
przejście za pomocą parametru setSharedElementReturnTransition
poza wywołaniem zwrotnym.
Więcej informacji znajdziesz w przykładowym kodzie na GitHubie.
Wymagania
W tabelach poniżej znajdziesz informacje o elementach kontrolowanych przez opcje programisty:
targetSdkVersion
i compileSdkVersion
, wersja urządzenia, zależności,
w pliku manifestu i flagi fragmentów. 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