Jeśli aplikacja została już przeniesiona na nowe interfejsy API do wstecznego wywołania systemu, możesz włączyć wsteczne wywołanie przewidujące, aby automatycznie otrzymywać animacje w aplikacji i obsługiwać przejścia niestandardowe.
Dodawanie obsługi wbudowanych animacji w aplikacji
Gdy włączysz tę funkcję, aplikacja będzie wyświetlać animacje powrót do strony głównej, i wielozadaniowość.
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 materiałów na GitHubie.
Film przedstawia krótki przykład animacji sygnalizujących powrót do strony do wielu aktywności i powrót do domu w aplikacji Ustawienia na Androidzie.
- W animacji użytkownik przesuwa palcem, aby wrócić do poprzedniego ekranu ustawień – przykład animacji obejmującej różne czynności.
- Na poprzednim ekranie użytkownik zaczyna przesuwać palcem w drugą stronę, co powoduje wyświetlenie podglądu ekranu głównego z tapetą – przykład animacji powrotu do ekranu głównego.
- 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 wspieraniu funkcji przewidywania tekstu wstecz.
Dodawanie niestandardowych przejść i animacji w aplikacji
Możesz tworzyć niestandardowe animacje i przejścia w usłudze w aplikacji za pomocą interfejsu Progress API i niestandardowej metody animacji między działaniami.overrideActivityTransition
Dodawanie niestandardowych przejść za pomocą interfejsu Progress API
W wersji 1.8.0-alpha01 lub nowszej pakietu AndroidX Activity możesz używać interfejsów API Progresja przewidującego powrotu, aby tworzyć niestandardowe animacje przewidującego gestu powrotu w aplikacji. W wersji OnBackPressedCallback dodaliśmy metody handleOnBackProgressed, handleOnBackCancelled i handleOnBackStarted, które służą do animowania obiektów podczas przesuwania palcem w kierunku wyjścia. Używaj
jeśli potrzebujesz bardziej niestandardowych animacji niż domyślne:
dostarczane przez nowe animacje systemowe lub animacje komponentu Material 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 ramach AndroidX Transitions
Interfejsy Progress API można używać z AndroidX Transitions w wersji 1.5.0-alpha01 lub nowszej na Androidzie 14 lub nowszym, aby tworzyć przejścia z funkcją przewidywania wstecznego.
- Użyj TransitionManager#controlDelayedTransitionzamiastbeginDelayedTransition, aby odtwarzać przejścia jako: użytkownik przesunie palcem do tyłu.
- Utwórz przejście w handleOnBackStarted.
- Odtwórz przejście za pomocą zdarzenia Wstecz w komponentach handleOnBackProgressed, odnosząccurrentFractiondoBackEvent.progress, co pokazuje, jak daleko użytkownik przewinął ekran w kierunku Wstecz.
- Zakończ przenoszenie po zatwierdzeniu gestu cofania przez użytkownika
handleOnBackPressed
- Na koniec zresetuj stan przejścia w handleOnBackCancelled.
Na tym filmie, w kodzie Kotlina i pliku XML demonstrujemy przejście między 2 polem zaimplementowane 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 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 każdą animację.
- Przewidywane przejścia wstecz są obsługiwane w przypadku przejścia na AndroidaX. ale nie w przypadku przejścia na nową platformę. Zalecamy odejście od platformy przejścia.
- Przejścia wstecz oparte na przewidywaniu są obsługiwane na urządzeniach z Androidem 14 lub nowszym i nie są zgodne z wersjami starszymi.
- Przejścia utworzone przy użyciu scen XML również są obsługiwane. W
handleOnBackStarted, ustawTransitionSeekControllerna wynikTransitionManager.createSeekControllerzamiast wynikucontrolDelayedTransition.
Dodawanie niestandardowych przeniesień aktywności na Androidzie 14 i nowszych
Aby mieć pewność, że niestandardowe przejścia w Aktywności obsługują funkcję przewidywania powrotu w Androidzie 14 i nowszych wersjach, możesz użyć 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 onCreateaktywności B. .
- Gdy użytkownik przechodzi do aktywności B, użyj OVERRIDE_TRANSITION_OPEN. Kiedy użytkownik przesuwa palcem, aby wrócić do aktywności A, użyjOVERRIDE_TRANSITION_CLOSE
- W przypadku parametru - OVERRIDE_TRANSITION_CLOSEwartość- enterAnimto animacja wejścia aktywności A, a wartość- exitAnimto animacja wyjścia z aktywności B.
