Если вы не должны использовать библиотеку поддержки затем посмотреть на Roman's ответ.
Но если вы хотите использовать библиотеку поддержки , вам необходимо использовать старую структуру анимации, как описано ниже.
После консультаций Reto's и blindstuff's ответов Я получил следующий код.
Фрагменты появляются скольжения справа и скользящим на левый при нажатии назад.
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();
Порядок важен. Это означает, что вы должны позвонить setCustomAnimations()
, если replace()
или анимация не вступит в силу!
Следующие файлы должны быть размещены внутри папки 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>
Продолжительность анимации может быть изменен на любой из значений по умолчанию, как @android:integer/config_shortAnimTime
или любой другой номер.
Обратите внимание, что если между заменами фрагментов происходит изменение конфигурации (например, вращение), то заднее действие не анимируется. Это documented bug, который все еще существует в rev 20 библиотеки поддержки.
Awesome, спасибо. – alexanderblom
Когда я попробовал это, он покажет * RuntimeException: Неизвестное имя аниматора: translate *. –
Убедитесь, что анимации, определенные в slide_in_left и right, построены с использованием набора определений объектных атрибутов, а не старого определения анимации. –