98 votes

échanger un fragment dans une activité via une animation

Je veux échanger deux fragments dans 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 le côté droit 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.

291voto

sciutand Points 1001

Vieux questiion et vous avez probablement déjà pensé à elle, mais pour une 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 de la slide_in_left animation:

<?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 que c'est l'animation si vous utilisez la bibliothèque de compatibilité. Au lieu de cela, si vous utilisez le SDK et avec un support natif pour la FragmentManager alors 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>

C'est parce que la bibliothèque de compatibilité ne prend pas en charge le nouveau objectAnimator type et au lieu d'implémenter l'ancien cadre de l'animation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X