#android #android-fragments #android-animation #android-transitions
#Android #android-фрагменты #android-анимация #android-переходы
Вопрос:
У меня есть два фрагмента с именем MainFragment
и PlaybackFragment
соответственно. Я использую компонент архитектуры навигации для реализации навигации между ними.
Что я хочу сделать, так это создать переход, по которому PlaybackFragment
он будет MainFragment
перемещен, и когда пользователь закроется PlaybackFragment
, он будет скользить вниз, MainFragment
снова открываясь.
Для этого я создал две анимации перевода. Один для скольжения вверх:
anim_nav_slide_up.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="250"
android:fromYDelta="100%"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toYDelta="0%" />
И один для скольжения вниз:
anim_nav_slide_down.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="250"
android:fromYDelta="0%"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toYDelta="100%" />
Проблема в том, что вместо MainFragment
того, чтобы оставаться неподвижным во время перехода, MainFragment
insteadd скользит вниз, как PlaybackFragment
показано, при этом он скользит вверх, когда PlaybackFragment
закрыт. Я прикрепил пример ниже.
Есть ли способ сделать PlaybackFragment
слайд MainFragment
без MainFragment
перемещения? Я не хочу использовать нижние листы, так как не думаю, что это их предназначение в данной ситуации.
Ответ №1:
Используйте анимацию, которая ничего не делает.
hold.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromYDelta="0.0%p"
android:toYDelta="0.0%p" />
</set>
и в файле xml компонента навигации назначьте его как popEnterAnim
app:popEnterAnim="@anim/hold"
app:popExitAnim="@anim/slide_out_down"