Ajout de la prise en charge des animations intégrées et personnalisées pour la prévisualisation du Retour

Si vous avez déjà migré votre application vers les nouvelles API système Back, vous pouvez activer la prévisualisation du Retour pour recevoir automatiquement des animations dans l'application et accepter les transitions personnalisées.

Ajouter la prise en charge des animations intégrées aux applications

Vidéo  : animations pour la prévisualisation du Retour

Une fois cette option activée, votre application affiche des animations multi-activités, multitâches et de retour à l'écran d'accueil.

Vous pouvez également mettre à niveau la dépendance de votre composant Material vers la version 1.10.0 de MDC Android pour recevoir des animations de composants Material comme celles-ci :

Pour en savoir plus, consultez le guide des composants Material pour les développeurs sur GitHub.

La vidéo présente un court exemple d'animations de prévisualisation du Retour dans le cadre du passage d'une activité à une autre ou du retour à l'écran d'accueil et pour l'application Paramètres d'Android.

  1. Dans l'animation, l'utilisateur balaie l'écran vers l'arrière pour retourner à l'écran de paramètres précédent. C'est un exemple d'animation multi-activité.
  2. De retour à l'écran précédent, l'utilisateur commence à balayer l'écran une deuxième fois vers l'arrière pour afficher un aperçu de l'écran d'accueil avec son fond d'écran. C'est un exemple d'animation de retour à l'écran d'accueil.
  3. L'utilisateur continue de balayer l'écran vers la droite. S'affiche alors une animation de la fenêtre qui rétrécit jusqu'à devenir l'icône de l'écran d'accueil.
  4. L'utilisateur est à présent pleinement de retour à l'écran d'accueil.

En savoir plus sur la prise en charge de la prévisualisation du Retour

Ajouter des animations et des transitions personnalisées aux applications

Pour les propriétés intégrées à l'application, vous pouvez créer des animations et des transitions personnalisées à l'aide de l'API Progress et de la méthode personnalisée d'animations multi-activités overrideActivityTransition.

Ajouter des transitions personnalisées à l'aide de l'API Progress

Avec AndroidX Activity 1.8.0-alpha01 ou version ultérieure, vous pouvez utiliser les API Progress de prévisualisation du Retour pour développer des animations adaptées à votre application. Dans OnBackPressedCallback, nous avons introduit les méthodes handleOnBackProgressed, handleOnBackCancelled et handleOnBackStarted pour animer des objets pendant que l'utilisateur balaie l'écran pour revenir en arrière. Utilisez ces méthodes si vous avez besoin d'éléments plus personnalisés que les animations par défaut fournies par les nouvelles animations système ou les animations du composant Material.

La plupart des applications devraient utiliser les API AndroidX rétrocompatibles. Toutefois, il existe des API de plate-forme similaires dans l'interface OnBackAnimationCallback que vous pouvez tester dans la Preview développeur 1 d'Android 14 et versions ultérieures.

Utiliser les API Progress avec AndroidX Transitions

À partir d'Android 14, les API Progress peuvent être utilisées avec AndroidX Transitions 1.5.0-alpha01 ou version ultérieure pour créer des transitions de prévisualisation du Retour.

  1. Utilisez TransitionManager#controlDelayedTransition au lieu de beginDelayedTransition pour activer les transitions lorsque l'utilisateur balaie l'écran pour revenir en arrière.
  2. Créez la transition dans handleOnBackStarted.
  3. Lancez la transition avec l'événement de retour en arrière dans handleOnBackProgressed en associant currentFraction à BackEvent.progress, qui indique jusqu'où l'utilisateur a balayé l'écran.
  4. Dans handleOnBackPressed, arrêtez la transition une fois que l'utilisateur a terminé son geste.
  5. Enfin, réinitialisez l'état de la transition dans handleOnBackCancelled.

La vidéo, le code Kotlin et le code XML suivants illustrent une transition personnalisée entre deux zones implémentées avec 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>

Tenez compte des points suivants lorsque vous utilisez des transitions de prévisualisation du Retour:

  • Utilisez isSeekingSupported pour vérifier si la transition est compatible avec la prévisualisation du Retour.
  • Forcez isSeekingSupported afin de renvoyer la valeur "true" pour vos transitions personnalisées.
  • Créez un contrôleur par animation.
  • Les transitions de prévisualisation du Retour sont compatibles avec les transitions AndroidX, mais pas avec les transitions de framework. Nous vous recommandons d'abandonner ce type de transitions.
  • Les transitions de prévisualisation du Retour sont utilisables sur les appareils équipés d'Android 14 ou d'une version ultérieure. Elles ne sont pas rétrocompatibles.
  • Les transitions créées avec des scènes XML sont également prises en charge. Dans handleOnBackStarted, définissez votre TransitionSeekController sur le résultat de TransitionManager.createSeekController plutôt que sur celui de controlDelayedTransition.

Ajouter des transitions d'activité personnalisées sous Android 14 ou version ultérieure

Pour vous assurer que les transitions d'activité personnalisées sont compatibles avec la prévisualisation du Retour sur Android 14 ou version ultérieure, vous pouvez utiliser overrideActivityTransition au lieu de overridePendingTransition. Cela signifie que l'animation de transition s'exécute pendant que l'utilisateur balaie l'écran vers l'arrière.

Pour illustrer cette approche, imaginez un scénario dans lequel l'activité B se superpose à l'activité A dans la pile "Retour". Vous géreriez alors les animations d'activité personnalisées comme suit :

  • Appel des transitions d'ouverture ou de fermeture dans la méthode onCreate de l'activité B.
  • Lorsque l'utilisateur accède à l'activité B, utilisation de OVERRIDE_TRANSITION_OPEN. Lorsque l'utilisateur balaie l'écran pour revenir à l'activité A, utilisation de OVERRIDE_TRANSITION_CLOSE.
  • Lorsque vous spécifiez OVERRIDE_TRANSITION_CLOSE, enterAnim est l'animation d'entrée de l'activité A et exitAnim est l'animation de sortie de l'activité B.