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#controlDelayedTransition
zamiastbeginDelayedTransition
, 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ąccurrentFraction
doBackEvent.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
, ustawTransitionSeekController
na wynikTransitionManager.createSeekController
zamiast 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
onCreate
aktywnoś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_CLOSE
wartośćenterAnim
to animacja wejścia aktywności A, a wartośćexitAnim
to animacja wyjścia z aktywności B.