Pour animer la transition entre les fragments, ou pour animer le processus d'affichage ou de masquage d'un fragment, vous utilisez le Fragment Manager
pour créer un Fragment Transaction
.
Dans chaque transaction de fragment, vous pouvez spécifier des animations d'entrée et de sortie qui seront utilisées respectivement pour afficher et masquer (ou les deux lorsque le remplacement est utilisé).
Le code suivant montre comment remplacer un fragment en faisant glisser un fragment et en faisant glisser l'autre à sa place.
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
// Start the animated transition.
ft.commit();
Pour réaliser la même chose en cachant ou en montrant un fragment que vous appelez simplement ft.show
ou ft.hide
en passant respectivement le fragment que vous souhaitez afficher ou masquer.
Pour référence, les définitions d'animation XML utiliseraient la objectAnimator
balise. Un exemple de slide_in_left 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>
Si vous n'êtes pas obligé d'utiliser la bibliothèque de support, jetez un œil à la réponse de Roman .
Mais si vous souhaitez utiliser la bibliothèque de support, vous devez utiliser l'ancien framework d'animation comme décrit ci-dessous.
Après avoir consulté les réponses de Reto et de Blindstuff, j'ai fait fonctionner le code suivant.
Les fragments semblent glisser de la droite et glisser vers la gauche lorsque vous appuyez sur le dos.
L'ordre est important. Cela signifie que vous devez appeler
setCustomAnimations()
avantreplace()
ou l'animation ne prendra pas effet!Ensuite, ces fichiers doivent être placés dans le dossier res / anim .
enter.xml :
exit.xml :
pop_enter.xml :
pop_exit.xml :
La durée des animations peut être modifiée à n'importe quelle valeur par défaut comme
@android:integer/config_shortAnimTime
ou tout autre nombre.Notez que si entre les remplacements de fragments un changement de configuration se produit (par exemple une rotation), l'action de retour n'est pas animée. Il s'agit d'un bogue documenté qui existe toujours dans la version 20 de la bibliothèque de support.
la source
Je vous suggère fortement de l'utiliser au lieu de créer le fichier d'animation car c'est une bien meilleure solution. Android Studio fournit déjà par défaut que
animation
vous pouvez utiliser sans créer de nouveau fichier XML. Les noms des animations sont android.R.anim.slide_in_left et android.R.anim.slide_out_right et vous pouvez les utiliser comme suit:Production:
la source
Ma bibliothèque de support modifiée prend en charge à la fois les animations de vue (ie
<translate>, <rotate>
) et les animateurs d'objets (ie<objectAnimator>
) pour les transitions de fragments. Il est implémenté avec NineOldAndroids . Reportez-vous à ma documentation sur github pour plus de détails.la source
Quant à moi, j'ai besoin de la vue diraction:
Voici le code qui fonctionne pour moi:
slide_in_right.xml
slide_out_left.xml
code de transaction:
la source
Je résous le problème ci-dessous
la source