Как создать переход, при котором фрагмент перемещается вверх по другому фрагменту?

#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 закрыт. Я прикрепил пример ниже.

Обратите внимание, как MainFragment скользит вниз, а 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"