240 votes

Dimensions et Animation@label: slider

Comment devriez-vous mettre en œuvre le tri de glissement, par exemple, le Nid d'abeille Gmail client utilise?

Peut - TransactionManager gérer cela automatiquement en ajoutant et en supprimant les Fragments, c'est un peu difficile de tester ce à cause de l'émulateur en cours d'un diaporama :)

355voto

Reto Meier Points 55904

Pour animer la transition entre les fragments, ou pour animer le processus d'afficher ou de masquer un fragment que vous utilisez l' Fragment Manager créer un Fragment Transaction.

Au sein de chaque Fragment de la Transaction, vous pouvez spécifier dans et hors des animations qui seront utilisés pour afficher et masquer respectivement (ou les deux quand remplacer est utilisé).

Le code suivant montre comment remplacer un fragment en glissant un fragment coulissante et 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 avec de cacher ou de montrer un fragment que vous souhaitez simplement appel ft.show ou ft.hide, passant dans le Fragment que vous souhaitez afficher ou masquer respectivement.

Pour référence, le document XML de l'animation des définitions utiliser l' objectAnimator balise. Un exemple de slide_in_left pourrait ressembler à quelque chose comme 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>

216voto

dmanargias Points 698

Si vous n'avez pas à utiliser la bibliothèque de prise en charge puis un coup d'oeil au Roman de réponse.

Mais si vous souhaitez utiliser la bibliothèque de prise en charge , vous devez utiliser l'ancien cadre de l'animation comme décrit ci-dessous.

Après consultation de Reto s et blindstuff de réponses que j'ai obtenu le code suivant de travail.

Les fragments apparaissent de glissement à partir de la droite et faites glisser vers la gauche lorsque le dos est appuyé.

FragmentManager fragmentManager = getSupportFragmentManager();

FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);

CustomFragment newCustomFragment = CustomFragment.newInstance();
transaction.replace(R.id.fragment_container, newCustomFragment );
transaction.addToBackStack(null);
transaction.commit();

L'ordre est important.

Suivant ces fichiers doivent être placés à l'intérieur de la res/anim dossier.

enter.xml:

<?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="@android:integer/config_mediumAnimTime"/>
</set>

exit.xml:

<set>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
               android:fromXDelta="0"
               android:toXDelta="-100%"
               android:interpolator="@android:anim/accelerate_interpolator"
               android:duration="@android:integer/config_mediumAnimTime"/>
</set>

pop-enter.xml:

<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="@android:integer/config_mediumAnimTime"/>
</set>

pop-exit.xml:

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

La durée de l'animation peut être changé à n'importe quel des valeurs par défaut comme @android:integer/config_shortAnimTime ou n'importe quel autre numéro.

Notez que si, dans entre fragment de remplacement d'un changement de configuration se produit (par exemple la rotation) l'action n'est pas animé. C'est un bogue documenté qui existe encore dans la rev 20 de la bibliothèque de prise en charge.

5voto

mark.kedzierski Points 494

Mon modifiée bibliothèque de prise en charge prise en charge en utilisant à la fois des animations (c - <translate>, <rotate>) et de l'Objet des Animateurs (c - <objectAnimator>) pour le Fragment de Transitions. Il est mis en œuvre avec NineOldAndroids. Reportez-vous à ma documentation sur github pour plus de détails.

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: