Je pensais que le système inverserait les animations sur le backstack lorsque le bouton Précédent serait enfoncé lors de l'utilisation de fragments à l'aide du code suivant:
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);
ft.replace(R.id.viewContainer, new class(), "layout").addToBackStack(null).commit();
Selon le documentation Android pour une animation personnalisée :
Changement:
ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);
À:
ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out );
et maintenant le backstack s'anime - en sens inverse !!
Utilisez l'animation Correcte, j'ai utilisé ce qui suit et son travail comme un charme
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_mediumAnimTime" >
<objectAnimator
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="500"
Android:propertyName="x"
Android:valueFrom="1000"
Android:valueTo="0"
Android:valueType="floatType" />
</set>
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_mediumAnimTime" >
<objectAnimator
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="500"
Android:propertyName="x"
Android:valueFrom="0"
Android:valueTo="1000"
Android:valueType="floatType" />
</set>
slide_out_left.xml
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_mediumAnimTime" >
<objectAnimator
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="500"
Android:propertyName="x"
Android:valueFrom="0"
Android:valueTo="-1000"
Android:valueType="floatType" />
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_mediumAnimTime" >
<objectAnimator
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="500"
Android:propertyName="x"
Android:valueFrom="-1000"
Android:valueTo="0"
Android:valueType="floatType" />
</set>
Puis utilisez ce qui suit en ajoutant un fragment
setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_out_right, R.anim.slide_in_right)
et cela fonctionnera à 100%
dans mon cas
ft.setCustomAnimations(Android.R.anim.slide_in_left, Android.R.anim.slide_out_right,
R.anim.slide_in_right, R.anim.slide_out_left);
créerait une animation parfaite.
slide_in_right
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate Android:fromXDelta="50%p" Android:toXDelta="0"
Android:duration="@Android:integer/config_mediumAnimTime"/>
<alpha Android:fromAlpha="0.0" Android:toAlpha="1.0"
Android:duration="@Android:integer/config_mediumAnimTime" />
</set>
slide_out_left
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate Android:fromXDelta="0" Android:toXDelta="-50%p"
Android:duration="@Android:integer/config_mediumAnimTime"/>
<alpha Android:fromAlpha="1.0" Android:toAlpha="0.0"
Android:duration="@Android:integer/config_mediumAnimTime" />
</set>
.setCustomAnimations(R.animator.fragment_fade_in,
R.animator.fragment_fade_out,
R.animator.fragment_fade_p_in,
R.animator.fragment_fade_p_out)
Remplacez ce qui précède par:
mFragmentManager.beginTransaction()
.setCustomAnimations(R.animator.fragment_fade_in,
R.animator.fragment_fade_out,
R.animator.fragment_fade_p_in,
R.animator.fragment_fade_p_out)
.replace(R.id.main_container, FragmentPlayerInfo.getInstance(data))
.addToBackStack(FragmentPlayerInfo.TAG)
.commit();