Dodanie obsługi wbudowanych i niestandardowych animacji przewidywanego przejścia wstecz

Jeśli aplikacja została już przeniesiona do nowych interfejsów API systemu, możesz: włącz prognozowanie z powrotem, aby automatycznie otrzymywać reklamy w aplikacji ani animacji, i obsługują przejścia niestandardowe.

Dodanie obsługi wbudowanych animacji w aplikacji

.
Wideo: animacje przewidywanego przejścia wstecz

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:

Aby dowiedzieć się więcej, zapoznaj się ze wskazówkami dla deweloperów dotyczącymi komponentów materiałów na GitHubie. i informacjami o nich.

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.

  1. W animacji użytkownik przesuwa palcem z powrotem, aby wrócić do poprzednich ustawień. screen – przykład animacji przedstawiającej różne aktywności.
  2. 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ą.
  3. Użytkownik nadal przesuwa w prawo, pokazując animację okna. zmniejsza się do ikony na ekranie głównym.
  4. 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

Niestandardowe animacje i przejścia usługi w aplikacji możesz tworzyć za pomocą Interfejs Progress API i niestandardowa metoda animacji opartych na aktywnościach overrideActivityTransition

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. W ciągu OnBackPressedCallback wprowadziliśmy handleOnBackProgressed, handleOnBackCancelled i Metody handleOnBackStarted do animowania obiektów, gdy użytkownik przesuwa palcem do tyłu. 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 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.

  1. Użyj TransitionManager#controlDelayedTransition zamiast beginDelayedTransition, aby odtwarzać przejścia jako: użytkownik przesunie palcem do tyłu.
  2. Utwórz przejście w usłudze handleOnBackStarted.
  3. Odtwórz przejście ze zdarzeniem wstecz w ciągu handleOnBackProgressed do dotyczące: currentFraction i BackEvent.progress, co pokazuje, jak daleko użytkownik przesunął palcem do tyłu.
  4. Zakończ przenoszenie po zatwierdzeniu gestu cofania przez użytkownika handleOnBackPressed
  5. 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 lub nowszym nie są zgodne wstecznie.
  • Przejścia utworzone przy użyciu scen XML również są obsługiwane. W handleOnBackStarted, ustaw TransitionSeekController na wynik TransitionManager.createSeekController zamiast wyniku controlDelayedTransition.

Dodawanie niestandardowych przeniesień aktywności na Androidzie 14 i nowszych

Aby zapewnić, że niestandardowe przenoszenie aktywności będzie obsługiwać prognozowanie na 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żyj OVERRIDE_TRANSITION_CLOSE
  • Przy określaniu OVERRIDE_TRANSITION_CLOSE enterAnim jest aktywności A wprowadź animację, a exitAnim to animacja wyjścia aktywności B.