remove popbackstack from backstack activity android android-fragments android-animation back-stack

android - popbackstack - Cómo revertir animaciones de fragmentos en BackStack?



fragment back navigation android (4)

Pensé que el sistema revertiría las animaciones en el backstack cuando se presiona el botón Atrás cuando se usan fragmentos usando el siguiente código:

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


De acuerdo con la documentación de Android para animación personalizada :

Cambio:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);

A:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out );

y ahora el backstack anima - ¡En reversa!


Usa la animación correcta que he usado a continuación y funciona como un amuleto

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>

Luego use following mientras agrega fragmento

setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_out_right, R.anim.slide_in_right)

y funcionó 100%


en mi caso

ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, R.anim.slide_in_right, R.anim.slide_out_left);

crearía una animación perfecta.

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)

Reemplace lo anterior con:

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