Для анимации перехода между фрагментами или для анимации процесса отображения или скрытия фрагмента вы используете Fragment Manager
для созданияFragment Transaction
.
В каждой транзакции фрагмента вы можете указать анимацию входа и выхода, которая будет использоваться для показа и скрытия соответственно (или обоих при использовании замены).
Следующий код показывает, как вы должны заменить фрагмент, выдвинув один фрагмент и сдвинув другой на его место.
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
// Start the animated transition.
ft.commit();
Чтобы добиться того же, скрывая или показывая фрагмент, который вы просто называете ft.show
или ft.hide
, передавая фрагмент, который вы хотите показать или скрыть соответственно.
Для справки, определения анимации XML будут использовать objectAnimator
тег. Пример slide_in_left может выглядеть примерно так:
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="-1280"
android:valueTo="0"
android:duration="500"/>
</set>
Если вам не нужно использовать библиотеку поддержки, взгляните на ответ Романа .
Но если вы хотите использовать библиотеку поддержки, вы должны использовать старую инфраструктуру анимации, как описано ниже.
После консультации Рета и blindstuff - ые ответов я получил следующий код работать.
Фрагменты кажутся скользящими справа и скользящими влево при нажатии назад.
Порядок важен. Это означает, что вы должны позвонить
setCustomAnimations()
раньше,replace()
иначе анимация не вступит в силу!Далее эти файлы должны быть помещены в Res / Anim папку .
enter.xml :
exit.xml :
pop_enter.xml :
pop_exit.xml :
Длительность анимации можно изменить на любое из значений по умолчанию, например,
@android:integer/config_shortAnimTime
или любое другое число.Обратите внимание, что если между заменами фрагментов происходит изменение конфигурации (например, вращение), обратное действие не анимируется. Это задокументированная ошибка, которая все еще существует в 20-й версии библиотеки поддержки.
источник
Я настоятельно рекомендую вам использовать это вместо создания файла анимации, потому что это гораздо лучшее решение. Android Studio уже предоставляет стандартную настройку, которую
animation
вы можете использовать без создания какого-либо нового XML-файла. Названия анимаций: android.R.anim.slide_in_left и android.R.anim.slide_out_right, и вы можете использовать их следующим образом:Вывод:
источник
Моя измененная библиотека поддержки поддерживает использование анимаций просмотра (т.е.
<translate>, <rotate>
) и аниматоров объектов (т.е.<objectAnimator>
) для переходов фрагментов. Это реализовано с NineOldAndroids . За подробностями обращайтесь к моей документации на github.источник
Что касается меня, мне нужно посмотреть направление:
Вот у меня работает код:
slide_in_right.xml
slide_out_left.xml
код операции:
источник
Я решаю это следующим образом
источник