Sobes.tech
Middle

Que faut-il faire pour l'animation de transition entre les écrans?

sobes.tech IA

Réponse de l'IA

Pour l'animation de transition entre écrans sur Android, plusieurs approches peuvent être utilisées:

  1. Animations d'activité (Activity Animations): Définies dans les thèmes ou par programmation. Permettent de définir des animations d'entrée et de sortie standard pour les activités.

    override fun startActivity(intent: Intent) {
        super.startActivity(intent)
        overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)
    }
    
    override fun finish() {
        super.finish()
        overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right)
    }
    

    Fichiers d'animation (par exemple, res/anim/slide_in_right.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:fromXDelta="100%"
            android:toXDelta="0%"
            android:duration="@android:integer/config_shortAnimTime" />
    </set>
    
  2. Animations de fragments (Fragment Animations): Définies lors de la transaction de fragment.

    supportFragmentManager.beginTransaction()
        .setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out)
        .replace(R.id.container, fragment)
        .commit()
    
  3. Transitions d'éléments partagés (Shared Element Transitions): Permettent d'animer la transition d'un ou plusieurs View entre écrans, créant un effet de continuité. Nécessitent d'activer le support de transition dans le thème.

    Dans l'activité source:

    val options = ActivityOptionsCompat.makeSceneTransitionAnimation(
        this,
        sharedView, // View pour l'animation
        ViewCompat.getTransitionName(sharedView) // Nom pour le lien
    )
    startActivity(intent, options.toBundle())
    

    Dans l'activité de destination:

    // Dans la méthode onCreate ou onViewCreated (pour les fragments)
    supportPostponeEnterTransition() // Retarder l'animation d'entrée jusqu'à ce que les Views soient prêtes
    // Ensuite, lorsque les Views sont prêtes (par exemple, dans un listener de chargement d'image):
    supportStartPostponedEnterTransition()
    

    En XML pour les deux écrans:

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:transitionName="image_transition" /> <!-- Nom pour le lien -->
    
  4. Animations de composants (Navigation Component): Si le Navigation Component est utilisé, les animations de transition peuvent être définies directement dans le graphique de navigation.

    <action
        android:id="@+id/action_fragmentA_to_fragmentB"
        app:destination="@id/fragmentB"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right" />
    

Le choix de la méthode dépend de l'architecture utilisée (Activity, Fragments, Navigation Component) et de l'effet souhaité.