1

L'exécution d'une simple glissière vers l'animation de gauche pour les fragments entrants et existants produit l'effet de la superposition du fragment entrant avec le fragment de sortie. Cela m'amène à penser que les deux transitions ne sont pas exécutées en même temps. Un indice ou une confirmation de ce comportement?Les transitions d'entrée et de sortie de fragment ne sont pas exécutées en même temps

L'effet souhaité est de faire glisser les fragments vers la gauche en même temps, sans chevauchement.

Le code:

Fragment current = ...; 
Fragment fragment = ...; 
Transition slideIn = TransitionInflater.from(this) 
    .inflateTransition(R.transition.fragment_indicator_enter) 
    .setDuration(300) 
    .setInterpolator(new LinearInterpolator()); 
fragment.setEnterTransition(slideIn); 

currentFragment.setExitTransition(TransitionInflater.from(this) 
    .inflateTransition(R.transition.fragment_indicator_exit) 
    .setDuration(300) 
    .setInterpolator(new LinearInterpolator())); 

getSupportFragmentManager() 
    .beginTransaction() 
    .replace(R.id.fragment_container, fragment) 
    .addToBackStack(null) 
    .commit(); 

La seule solution de contournement en savoir qu'il a été d'ajouter un setStartDelay (30) pour la transition entrant. Mais chose étrange, j'ai différentes transitions pour différents fragments et le startDelay doit être différent pour produire l'effet du glissement des deux fragments vers la gauche en même temps.

Répondre

0

L'effet est un comportement attendu de la transition, que tous les points de vue dans la mise en page sont déplacés à un autre moment pour éviter de déplacer tout comme un bloc créer un sens naturel du mouvement. Je veux intentionnellement cet effet de bloc, donc il est résolu en ajoutant une cible pour la transition, où cette cible est la FrameLayout contenant les vues du fragment.

fragment.setEnterTransition(new Slide(Gravity.RIGHT) 
        .addTarget(R.id.whole_content)); 
-1

Avez-vous essayé de placer les animations directement dans l'appel de transaction?

getSupportFragmentManager() 
.setCustomAnimations(R.transition.fragment_indicator_enter, R.transition.fragment_indicator_exit) 
.beginTransaction() 
.replace(R.id.fragment_container, fragment) 
.addToBackStack(null) 
.commit(); 
+0

Merci pour la suggestion, mais ce n'est pas valide dans mon cas. Je veux utiliser des transitions de contenu (api de sucette), ce qui n'est pas exactement la même chose. J'utilise des transitions personnalisées appliquant différents effets à différentes vues cibles. – juanmeanwhile