J'utilise Google API 8 (Android 2.2) avec le package de support technique v4.
Cela ne donne aucune erreur ou animation.
Transaction:
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.content, myFragment);
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.commit();
Animations:
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<translate
Android:duration="700"
Android:fromXDelta="-100%"
Android:toXDelta="0%" >
</translate>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="700"
Android:fromXDelta="0%"
Android:toXDelta="100%" >
</translate>
</set>
Est-ce que quelqu'un sait ce qui se passe ici?
Le responsable empilait ma transaction avant de définir l'animation. Il empile donc la transaction sans animations (triste mais vrai), et cela se produit même si je valide la transaction après le setCustomAnimations()
.
La solution consiste à définir les animations en premier:
FragmentTransaction transaction = manager.beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.replace(R.id.content, myFragment);
transaction.commit();
Comme suggéré ci-dessus, des déclarations séparées fonctionneront certainement. Mais le truc ici est à setCustomAnimation
avant de définir le type de transaction à savoir .add
, replace
, etc. Donc, en appliquant la même logique, method chaining
fonctionne également. par exemple.
getSupportFragmentManager().beginTransaction().
setCustomAnimations(R.anim.a_slide_up, R.anim.a_slide_down, R.anim.a_slide_up, R.anim.a_slide_down).
add(R.id.root_layout, MyFrag.newInstance().
addToBackStack("MyFrag").
commit();
En le mettant ici, pour que quelqu'un qui préfère method chaining
le trouve utile. À votre santé!
Laissant ceci ici comme c'est la question la plus populaire. J'ai eu le même problème avec la transaction de fragment n'animant pas. Le coupable avait l’attribut Android:animateLayoutChanges
défini sur true
dans la présentation correspondante.
J'espère que cela aidera quelqu'un à gagner du temps à la recherche d'une solution, car il peut être difficile de s'en apercevoir lorsqu'on dispose de mises en page imbriquées dans différents fichiers.
Une autre raison peut être de placer inutilement fragmentTransaction.show()
avant le commit. Cela fait que les transitions pop n'apparaissent pas sur certaines versions de l'API Android.