Lorsque vous utilisez les API du système pour le Retour, vous pouvez choisir d'afficher des animations dans l'application et de prendre en charge les transitions personnalisées.
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.
- 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é.
- 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.
- 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.
- L'utilisateur est à présent pleinement de retour à l'écran d'accueil.
Découvrez comment ajouter la compatibilité de la prévisualisation des gestes Retour.
Ajouter des animations et des transitions personnalisées aux applications
Vous pouvez créer des animations et des transitions personnalisées pour les propriétés intégrées à l'application, des animations personnalisées pour les activités et des animations personnalisées pour les fragments avec des gestes de prévisualisation du Retour.
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. Les API Progress sont utiles pour animer les vues, mais elles présentent des limites lors de l'animation des transitions entre les fragments. Dans OnBackPressedCallback
, nous avons introduit les méthodes handleOnBackProgressed
, handleOnBackCancelled
et handleOnBackStarted
pour animer des objets lorsque l'utilisateur balaie l'écran vers l'arrière. Utilisez ces méthodes si vous devez personnaliser davantage que les animations par défaut fournies par le 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
Les API Progress peuvent être utilisées avec AndroidX Transitions 1.5.0-alpha01 ou version ultérieure sur Android 14 et versions ultérieures pour créer des transitions de prévisualisation du Retour.
- Utilisez
TransitionManager#controlDelayedTransition
au lieu debeginDelayedTransition
pour activer les transitions lorsque l'utilisateur balaie l'écran pour revenir en arrière. - Créez la transition dans
handleOnBackStarted
. - Lancez la transition avec l'événement de retour en arrière dans
handleOnBackProgressed
en associantcurrentFraction
àBackEvent.progress
, qui indique jusqu'où l'utilisateur a balayé l'écran. - Dans
handleOnBackPressed
, arrêtez la transition une fois que l'utilisateur a terminé son geste. - 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>
Lorsque vous utilisez les transitions de prévisualisation du Retour, gardez à l'esprit les points suivants :
- 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. Abandonnez les transitions de framework et utilisez plutôt les transitions
Animator
et AndroidX. - Les transitions de prévisualisation du Retour sont compatibles avec les appareils exécutant Android 14 ou version ultérieure et ne sont pas rétrocompatibles.
- Les transitions créées avec des scènes XML sont également prises en charge. Dans
handleOnBackStarted
, définissez votreTransitionSeekController
sur le résultat deTransitionManager.createSeekController
plutôt que sur celui decontrolDelayedTransition
.
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 sous 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 deOVERRIDE_TRANSITION_CLOSE
. Lorsque vous spécifiez
OVERRIDE_TRANSITION_CLOSE
,enterAnim
est l'animation d'entrée de l'activité A etexitAnim
est l'animation de sortie de l'activité B.
Ajouter la prise en charge de la prévisualisation du Retour avec fragments
Lorsque vous implémentez la prévisualisation du Retour avec des fragments, deux approches sont possibles.
Utiliser des API existantes
Nous vous recommandons d'utiliser les API existantes. Ces API vous permettent de balayer l'écran à partir du bord pour manipuler vos transitions Animator ou AndroidX en effectuant un geste. Le fait de déplacer le geste au-delà d'un seuil détermine s'il est terminé et si vous revenez au fragment précédent, ou s'il est annulé et que vous restez sur le fragment actuel. Pour en savoir plus, consultez la section Parcourir les fragments à l'aide d'animations.
Tenez compte des facteurs suivants:
- Importez Transitions 1.5.0 ou version ultérieure et Fragments 1.7.0 ou version ultérieure. Une grande partie de la prise en charge de la prévisualisation du Retour dans les fragments repose sur la capacité des transitions à rechercher des animations, ce qui n'est possible que dans la version 1.5.0 ou ultérieure.
- Utilisez des fragments avec
FragmentManager
ou le composant de navigation pour gérer la pile "Retour". La prévisualisation du Retour n'est pas prise en charge si vous gérez votre propre pile "Retour". Éloignez les piles "Retour" queFragmentManager
ne connaît pas. - Certaines bibliothèques prennent en charge la prévisualisation du Retour. Consultez la documentation pour vous en assurer.
- La classe
Animator
et la bibliothèqueAndroidX Transition
sont compatibles. - La classe
Animation
et la bibliothèqueTransition
du framework ne sont pas compatibles. - Les animations prédictives ne fonctionnent que sur les appareils qui exécutent Android 14 ou version ultérieure.
Utilisez des interfragments pour la prévisualisation du Retour dans les situations suivantes :
- Animez le composant de navigation.
- Animez vos contenus avec
setCustomAnimations
. - Animez les transitions d'entrée et de sortie avec
setEnterTransition
,setExitTransition
,setReenterTransition
etsetReturnTransition
. - Animez des transitions d'éléments partagés avec
setSharedElementEnterTransition
etsetSharedElementReturnTransition
.
Certains mouvements matériels sont compatibles avec la prévisualisation du Retour à partir de la version 1.12.02-alpha02 ou ultérieure, y compris MaterialFadeThrough
, MaterialSharedAxis
et MaterialFade
. Remarque : MaterialContainerTransform
n'est pas compatible avec la prévisualisation du Retour.
Utiliser des rappels
Vous pouvez créer une transition entre les fragments à l'aide de rappels. Toutefois, il existe une limitation connue lorsque vous utilisez des rappels : les utilisateurs ne peuvent pas voir le fragment précédent lorsqu'ils balayent l'écran vers l'arrière. Pour créer une transition d'élément partagé entre les fragments qui correspond aux conseils de conception pour la prévisualisation du Retour, procédez comme suit:
Créez un OnBackPressedCallback
. Dans handleOnBackProgressed
, mettez à l'échelle et décalez le fragment. Ensuite, sortez de la pile arrière. Exécutez ensuite la transition d'élément partagé à l'aide de setSharedElementReturnTransition
en dehors du rappel.
Pour en savoir plus, consultez l'exemple de code sur GitHub.
Conditions requises
Utilisez le tableau suivant pour comprendre ce qui est contrôlé par targetSdkVersion
et compileSdkVersion
, la version de l'appareil, les dépendances, les indicateurs de fichier manifeste et les indicateurs de fragment. Ce tableau fait référence aux exigences de code.
Catégorie | Animation | compileSdk | targetSdk | Version de l'appareil | android:enableOnBackInvokedCallback | Dépendance |
---|---|---|---|---|---|---|
Animations système | Revenir à l'accueil | 33 | Tout | 35 | TRUE | Aucune |
Multiactivité | 34 | Tout | 35 | TRUE | Aucune | |
Multitâche | 34 | Tout | 35 | TRUE | Aucune | |
Plate-forme | Multi-activité personnalisée | 34 | Tout | 35 | TRUE | Aucune |
Plate-forme d'API Progress | 34 | Tout | 34 | TRUE | Aucune | |
Composants Material | Bottom sheet | 34 | Tout | 34 | TRUE | Composant Material 1.10.0 |
Feuille latérale | 34 | Tout | 34 | TRUE | Composant Material 1.10.0 | |
Panneau de navigation | 34 | Tout | 34 | TRUE | Composant Material 1.10.0 | |
Rechercher | 34 | Tout | 34 | TRUE | Composant Material 1.10.0 | |
Animations Jetpack | Multifragments AndroidX personnalisés | 34 | Tout | 34 | TRUE | Fragment AndroidX 1.7 |
Transitions AndroidX personnalisées | 34 | Tout | 34 | TRUE | Transition AndroidX 1.5 | |
API Jetpack Progress | 34 | Tout | 34 | TRUE | Activité AndroidX 1.8 |
Autres ressources
- Exemples de code de prévisualisation du Retour
- Principes de base des retours système (vidéo)
- Préparer l'avenir d'Android (vidéo)