web-dev-qa-db-fra.com

échanger un fragment dans une activité via une animation

Je veux échanger deux fragments d’une activité via animation. Supposons que PageA soit pour le fractionnement A et le côté gauche de l’écran et PageB pour le fragment B, c’est-à-dire que le côté droit de l’écran. Maintenant, je veux que lorsque je clique sur un bouton de la pageA, alors PageA se déplacera vers la droite de l'écran avec une animation de transition.

J'ai essayé le code ci-dessous pour remplacer la position

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, new FragB());
fragmentTransaction.commit();

À la recherche d'un indice.

Merci d'avance.

85
Deepak Goel

Ancienne question et vous l'avez probablement déjà compris, mais pour référence future:

voici ce que vous utilisez pour définir une animation personnalisée lorsque vous remplacez un fragment via le code:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.fragment_container, newFragment, "fragment");
// Start the animated transition.
ft.commit();

Voici un exemple d'animation slide_in_left:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
   Android:fromXDelta="-100%"
   Android:toXDelta="0"
   Android:interpolator="@Android:anim/decelerate_interpolator"
   Android:duration="500"/>
</set>

Notez qu'il s'agit de l'animation si vous utilisez la bibliothèque de compatibilité. Au lieu de cela, si vous utilisez un kit de développement logiciel (SDK) avec un support natif pour FragmentManager, votre animation ressemblera à 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>

En effet, la bibliothèque de compatibilité ne prend pas en charge le nouveau type objectAnimator et n'implémente que l'ancien framework d'animation.

265
sciutand