Wenn Sie die System-Back-APIs verwenden, können Sie In-App-Animationen und unterstützen benutzerdefinierte Übergänge.
Nach der Aktivierung zeigt deine App Animationen für den Rücken zu Hause, und aufgabenübergreifend arbeiten.
Sie können auch ein Upgrade Ihrer Abhängigkeit von wesentlichen Komponenten auf Version 1.10.0 von MDC ausführen. Android verwendet, um Animationen zu Materialkomponenten wie die folgenden zu empfangen:
Entwicklerleitfaden für Materialkomponenten auf GitHub lesen erhalten Sie weitere Informationen.
Das Video zeigt ein kurzes Beispiel für vorausschauende Rückwärtsanimationen aktivitätsübergreifend und zurück zu Hause mithilfe der Android-App "Einstellungen".
- In der Animation wischt der Nutzer zurück, um zu den vorherigen Einstellungen zurückzukehren. Bildschirm: ein Beispiel für eine aktivitätsübergreifende Animation.
- Auf dem vorherigen Bildschirm wischen Nutzende ein zweites Mal zurück, zeigt eine Vorschau des Startbildschirms mit Hintergrund – ein Beispiel für die Back-to-Home-Animation.
- Der Nutzer wischt weiter nach rechts und zeigt eine Animation des Fensters an. bis das Symbol auf dem Startbildschirm angezeigt wird.
- Der Nutzer ist jetzt vollständig zum Startbildschirm zurückgekehrt.
Benutzerdefinierte In-App-Übergänge und -Animationen hinzufügen
Sie können benutzerdefinierte In-App-Property-Animationen und -Übergänge, aktivitätsübergreifende Animationen und benutzerdefinierte fragmentierte Animationen mit „Zurück“-Touch-Gesten.
Benutzerdefinierte Übergänge mit der Progress API hinzufügen
Mit AndroidX Activity 1.8.0-alpha01 oder höher können Sie die Funktion Predictive Back
Progress APIs zur Entwicklung benutzerdefinierter Animationen
„Zurück“-Touch-Geste in Ihrer App. Mit Progress APIs
bei der Animation von Übergängen zwischen Fragmenten. Innerhalb von
OnBackPressedCallback
haben wir die
handleOnBackProgressed
,
handleOnBackCancelled
und
handleOnBackStarted
.
zum Animieren von Objekten,
während die Nutzenden zurückwischen. Verwenden Sie diese Methoden, wenn Sie
mehr als die vom System bereitgestellten Standardanimationen anpassen müssen oder
die Animationen der Material-Komponente.
Wir gehen davon aus, dass die meisten Apps die abwärtskompatiblen AndroidX APIs verwenden. Es gibt jedoch
ähnliche Plattform-APIs innerhalb des
OnBackAnimationCallback
die für den Test in der Entwicklervorschau 1 von Android 14 und höher verfügbar ist.
Progress APIs mit AndroidX Transitions verwenden
Die Progress APIs können mit AndroidX Transitions 1.5.0-alpha01 oder höher verwendet werden Android 14 und höher, um Predictive Back-Übergänge zu erstellen.
- Verwenden Sie
TransitionManager#controlDelayedTransition
anstelle vonbeginDelayedTransition
, um Übergänge als wischt der Nutzer zurück. - Erstellen Sie den Übergang innerhalb von
handleOnBackStarted
. - Spielen Sie den Übergang mit dem Ereignis „Zurück“ in
handleOnBackProgressed
ab, indem SiecurrentFraction
mitBackEvent.progress
verknüpft, was zeigt, wie weit die der Nutzer zurückgewischt hat. - Schließen Sie den Übergang ab, nachdem der Nutzer die Zurück-Touch-Geste in
handleOnBackPressed
- Setzen Sie zum Schluss den Übergangsstatus in
handleOnBackCancelled
zurück.
Das folgende Video, der Kotlin-Code und die XML-Datei zeigen einen benutzerdefinierten Übergang
zwischen zwei mit OnBackPressedCallback
implementierten Feldern:
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>
Beachten Sie bei der Arbeit mit Predictive Back-Übergängen Folgendes:
- Verwenden Sie
isSeekingSupported
, um zu prüfen, ob die Umstellung die Funktion „Predictive Back“ unterstützt. - Überschreiben Sie
isSeekingSupported
, damit für Ihre benutzerdefinierten Übergänge "true" zurückgegeben wird. - Erstellen Sie einen Controller pro Animation.
- Predictive Back-Übergänge werden mit AndroidX-Übergängen unterstützt, aber nicht mit Framework-Übergängen. Wir empfehlen eine Migration weg vom Framework Übergänge.
- Predictive Back-Übergänge wird auf Geräten mit Android 14 und und nicht abwärtskompatibel sind.
- Mit XML-Szenen erstellte Übergänge werden ebenfalls unterstützt. In
handleOnBackStarted
, setzeTransitionSeekController
auf das Ergebnis vonTransitionManager.createSeekController
anstelle des Ergebnisses voncontrolDelayedTransition
Benutzerdefinierte Aktivitätsübergänge unter Android 14 und höher hinzufügen
Um sicherzustellen, dass benutzerdefinierte Aktivitätsübergänge die Funktion „Predictive Back“ unter Android 14 unterstützen
und höher können Sie overrideActivityTransition
statt
overridePendingTransition
. Das bedeutet, dass die Übergangsanimation
wischt der Nutzer zurück.
Stellen Sie sich als Beispiel ein Szenario vor, Aktivität B läuft über Aktivität A im Back Stack. Sie verwalten benutzerdefinierte So können Sie Aktivitätsanimationen ansehen:
- Rufe entweder öffnende oder schließende Übergänge innerhalb der
onCreate
von Aktivität B auf . - Wenn der Nutzer zu Aktivität B wechselt, verwende
OVERRIDE_TRANSITION_OPEN
. Wann? wischt der Nutzer, um zu Aktivität A zurückzukehren,OVERRIDE_TRANSITION_CLOSE
Bei Angabe von
OVERRIDE_TRANSITION_CLOSE
istenterAnim
die Aktivität A Animation starten undexitAnim
ist die Exit-Animation von Aktivität B.
Unterstützung für „Predictive Back mit Fragmenten“ hinzufügen
Für die Implementierung von Predictive Back mit Fragmenten gibt es zwei Ansätze.
Vorhandene APIs verwenden
Wir empfehlen, vorhandene APIs zu verwenden. Mit diesen APIs können Sie von der des Bildschirms, um die Übergänge von Animator oder Androidx mit der Touch-Geste. Ob du die Bewegung über einen Grenzwert hinaus bewegst, bestimmt, abgeschlossen ist und Sie zum vorherigen Fragment zurückkehren. Andernfalls wird es abgebrochen und Sie bleiben auf dem aktuellen Fragment. Weitere Informationen finden Sie unter Mithilfe von Animationen zwischen Fragmenten wechseln
Beachten Sie die folgenden Faktoren:
- Importieren Transitions 1.5.0 oder und Fragments 1.7.0 oder später. Ein großer Teil der vorausschauenden Rückenunterstützung innerhalb von Fragmenten beruht auf Bei Übergängen kann nach Animationen gesucht werden, was nur in Transitions 1.5.0 oder höher.
- Verwenden Sie Fragmente entweder mit
FragmentManager
oder dem Navigationskomponente zur Verarbeitung des Back-Stacks. Prognose Die Schaltfläche „Zurück“ wird nicht unterstützt, wenn Sie Ihren eigenen Back-Stack verwalten. - Einige Bibliotheken unterstützen die Funktion „Predictive Back“. In der Dokumentation finden Sie Ja, gerne.
- Die Klasse
Animator
und Die BibliothekAndroidX Transition
ist unterstützt. - Die
Animation
-Klasse und die Framework-Transition
-Bibliothek werden nicht unterstützt. - Voraussagende Animationen funktionieren nur auf Geräten mit Android 14 oder höher.
Verwenden Sie in den folgenden Situationen prädiktive Rückwärtsfragmente:
- Navigationskomponente animieren:
- Animieren Sie mit
setCustomAnimations
. - Mit
setEnterTransition
können Sie Übergänge beim Ein- und Ausblenden animieren.setExitTransition
,setReenterTransition
undsetReturnTransition
- Übergänge gemeinsam genutzter Elemente animieren mit
setSharedElementEnterTransition
undsetSharedElementReturnTransition
Einige Materialbewegungen
voraussagenden Wert ab dem
1.12.02-alpha02
oder höher, einschließlich MaterialFadeThrough
, MaterialSharedAxis
und
MaterialFade
Hinweis: MaterialContainerTransform
unterstützt keine Vorschläge
zurück.
Callbacks verwenden
Sie können mithilfe von Callbacks einen fragmentierten Übergang erstellen, es gibt jedoch ein bekannte Einschränkung bei der Verwendung von Callbacks, bei denen Nutzer die vorherige Version nicht sehen können. Fragment, wenn du zurückwischst. So erstellen Sie einen Übergang zwischen fragmentierten Elementen und gemeinsam genutzten Elementen: der dem vorausschauenden Zurück Tipps für das Design, Erledigen Sie Folgendes:
Erstellen Sie ein OnBackPressedCallback
. Innerhalb von handleOnBackProgressed
skalieren und
das Fragment verschieben. Dann platzierst du sie aus dem Back Stack. Führen Sie als Nächstes das gemeinsam genutzte Element aus:
mit setSharedElementReturnTransition
außerhalb des Callbacks übergeben.
Weitere Informationen finden Sie im Code-Beispiel auf GitHub.
Voraussetzungen
In den folgenden Tabellen sehen Sie, was von den Entwickleroptionen gesteuert wird.
targetSdkVersion
und compileSdkVersion
, Geräteversion, Abhängigkeiten
Manifest- und Fragment-Flags. Die erste Tabelle bezieht sich auf Codeanforderungen.
Kategorie | Animation | CompileSdk | Ziel-SDK | android:enableOnBackInvokedCallback | Abhängigkeit |
---|---|---|---|---|---|
Systemanimationen | Zurück zur Startseite | 33 | Any | RICHTIG | Keine |
Aktivitätenübergreifend | 34 | Any | RICHTIG | Keine | |
Aufgabenübergreifend | 34 | Any | RICHTIG | Keine | |
Plattform | Benutzerdefinierte aktivitätsübergreifende Aktivitäten | 34 | Any | RICHTIG | Keine |
Progress API-Plattform | 34 | Any | RICHTIG | Keine | |
Materialkomponenten | Ansicht am unteren Rand | 34 | Any | RICHTIG | Materialkomponente 1.10.0 |
Seitenblatt | 34 | Any | RICHTIG | Materialkomponente 1.10.0 | |
Navigationsleiste | 34 | Any | RICHTIG | Materialkomponente 1.10.0 | |
Suchen | 34 | Any | RICHTIG | Materialkomponente 1.10.0 | |
Jetpack-Animationen | Benutzerdefiniertes AndroidX-Cross-Fragment | 34 | Any | RICHTIG | AndroidX Fragment 1.7 |
Benutzerdefinierte AndroidX-Übergänge | 34 | Any | RICHTIG | AndroidX Transition 1.5 | |
Progress API-Jetpack | 34 | Any | RICHTIG | AndroidX Activity 1.8 |
In der folgenden Tabelle sind die Anforderungen aufgeführt, die Nutzern das Ansehen von Animationen ermöglichen.
Kategorie | Animation | Entwickleroption aktiviert | Geräteversion |
---|---|---|---|
Systemanimationen | Zurück zur Startseite | RICHTIG | 33 |
Aktivitätenübergreifend | RICHTIG | 34 | |
Aufgabenübergreifend | RICHTIG | 34 | |
Plattform | Benutzerdefinierte aktivitätsübergreifende Aktivitäten | RICHTIG | 34 |
Progress API-Plattform | FALSCH | 34 | |
Materialkomponenten | Ansicht am unteren Rand | FALSCH | 34 |
Seitenblatt | FALSCH | 34 | |
Navigationsleiste | FALSCH | 34 | |
Suchen | FALSCH | 34 | |
Jetpack-Animationen | Benutzerdefiniertes AndroidX-Cross-Fragment | FALSCH | 34 |
Benutzerdefinierte AndroidX-Übergänge | FALSCH | 34 | |
Progress API-Jetpack | FALSCH | 34 |
Zusätzliche Ressourcen
- Codebeispiele für Predictive Back
- Grundlagen zu Systemback-Video
- Video: Die Zukunft von Android entwickeln