web-dev-qa-db-fra.com

Comment inverser les animations de fragments sur BackStack?

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();
110
user742030

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 !!

254
user742030

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%

22
Aniket

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>
9
Hoang Nguyen Huu
.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();
3
TarikW