如何创建一个片段向上滑动到另一个片段上的过渡?

How to create a transition where a fragment is slid upwards over another fragment?

我有两个分别名为 MainFragmentPlaybackFragment 的片段。我使用 Navigation Architecture Component 来实现两者之间的导航。

我想要做的是创建一个过渡,其中 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 会像显示 PlaybackFragment 那样向下滑动,而当 PlaybackFragment 时会向上滑动已关闭。我在下面附上了一个例子。

有没有办法让 PlaybackFragment 滑过 MainFragmentMainFragment 不移动?我不想使用 Bottom Sheets,因为我认为这不是他们在这种情况下的预期目的。

使用什么都不做的动画。

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"