Unterstützung für vorausschauende Zurück-Animationen hinzufügen

Wenn Sie die System-Back-APIs verwenden, können Sie In-App-Animationen und unterstützen benutzerdefinierte Übergänge.

<ph type="x-smartling-placeholder">
Video: Vorhersagbare Rückenanimationen

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".

  1. 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.
  2. 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.
  3. Der Nutzer wischt weiter nach rechts und zeigt eine Animation des Fensters an. bis das Symbol auf dem Startbildschirm angezeigt wird.
  4. Der Nutzer ist jetzt vollständig zum Startbildschirm zurückgekehrt.

Weitere Informationen

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

<ph type="x-smartling-placeholder">

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.

  1. Verwenden Sie TransitionManager#controlDelayedTransition anstelle von beginDelayedTransition, um Übergänge als wischt der Nutzer zurück.
  2. Erstellen Sie den Übergang innerhalb von handleOnBackStarted.
  3. Spielen Sie den Übergang mit dem Ereignis „Zurück“ in handleOnBackProgressed ab, indem Sie currentFraction mit BackEvent.progress verknüpft, was zeigt, wie weit die der Nutzer zurückgewischt hat.
  4. Schließen Sie den Übergang ab, nachdem der Nutzer die Zurück-Touch-Geste in handleOnBackPressed
  5. 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, setze TransitionSeekController auf das Ergebnis von TransitionManager.createSeekController anstelle des Ergebnisses von controlDelayedTransition

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 ist enterAnim die Aktivität A Animation starten und exitAnim 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 Bibliothek AndroidX 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:

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