Android Animer la transition entre les fragments


Exemple

Pour animer la transition entre les fragments ou pour animer le processus d'affichage ou de masquage d'un fragment, utilisez le FragmentManager pour créer une FragmentTransaction .

Pour une seule FragmentTransaction , il existe deux manières différentes d'effectuer des animations: vous pouvez utiliser une animation standard ou fournir vos propres animations personnalisées.

Les animations standard sont spécifiées en appelant FragmentTransaction.setTransition(int transit) et en utilisant l'une des constantes prédéfinies disponibles dans la classe FragmentTransaction . Au moment de la rédaction, ces constantes sont les suivantes:

FragmentTransaction.TRANSIT_NONE
FragmentTransaction.TRANSIT_FRAGMENT_OPEN
FragmentTransaction.TRANSIT_FRAGMENT_CLOSE
FragmentTransaction.TRANSIT_FRAGMENT_FADE

La transaction complète pourrait ressembler à ceci:

getSupportFragmentManager()
    .beginTransaction()
    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
    .replace(R.id.contents, new MyFragment(), "MyFragmentTag")
    .commit();

Les animations personnalisées sont spécifiées en appelant soit FragmentTransaction.setCustomAnimations(int enter, int exit) ou FragmentTransaction.setCustomAnimations(int enter, int exit, int popEnter, int popExit) .

Les animations d’ enter et de exit seront jouées pour les FragmentTransaction qui n’impliquent pas l’extinction de fragments de la pile arrière. Les animations popEnter et popExit seront lues lors de l'extraction d'un fragment de la pile arrière.

Le code suivant montre comment remplacer un fragment en faisant glisser un fragment et en glissant l'autre à sa place.

getSupportFragmentManager()
    .beginTransaction()
    .setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right)
    .replace(R.id.contents, new MyFragment(), "MyFragmentTag")
    .commit();

Les définitions d'animation XML utiliseraient la balise objectAnimator . Un exemple de slide_in_left.xml pourrait ressembler à ceci:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="x" 
    android:valueType="floatType"
    android:valueFrom="-1280"
    android:valueTo="0" 
    android:duration="500"/>
</set>