Jeśli nie musisz korzystać z biblioteki wsparcia, spójrz na odpowiedź Romana .
Ale jeśli chcesz użyć biblioteki wsparcia , musisz użyć starej ramy animacji, jak opisano poniżej.
Po zapoznaniu się z odpowiedziami Reto i blindstuff otrzymałem następujący kod.
Fragmenty wydają się przesuwać z prawej strony i przesuwać w lewo po naciśnięciu tyłu.
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();
Kolejność jest ważna. Oznacza to, że musisz setCustomAnimations()
wcześniej zadzwonić, replace()
inaczej animacja nie zadziała!
Następnie pliki te należy umieścić w folderze res / anim .
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>
Czas trwania animacji można zmienić na dowolną z domyślnych wartości, takich jak @android:integer/config_shortAnimTime
lub na dowolną inną liczbę.
Zauważ, że jeśli pomiędzy wymianami fragmentów nastąpi zmiana konfiguracji (na przykład obrót), działanie wsteczne nie jest animowane. Jest to udokumentowany błąd, który nadal występuje w wersji 20 biblioteki wsparcia.