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

问题描述

我有两个分别名为MainFragmentPlaybackFragment的片段。我使用导航体系结构组件在两者之间实现导航。@H_404_5@

我想做的是创建一个过渡,其中PlaybackFragment将滑过MainFragment,并且当用户关闭PlaybackFragment时,它将向下滑动,露出MainFragment再次。@H_404_5@

为此,我创建了两个翻译动画。一种向上滑动:@H_404_5@

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%" />

还有一个滑下来:@H_404_5@

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关闭时向上滑动。我已经在下面附上了一个例子。@H_404_5@

Notice how MainFragment slides downwards as PlaybackFragment slides upwards

@H_404_5@

是否有一种方法可以使PlaybackFragmentPlaybackFragment上滑动而不会移动MainFragment?我不想使用底表,因为我不认为这是他们在这种情况下的预期目的。@H_404_5@

解决方法

使用不做任何动作的动画。

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"