如何制作固定画面和新画面的幻灯片动画?

How to make slide animation with a fixed screen and new screen?

我为过渡制作了三个 xml 文件。

enter_from_right.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:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />
</set>

none.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:fromXDelta="100%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />
</set>

exit_to_right.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:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="100%"
        android:toYDelta="0%" />
</set>

但是,它在 Activities 中工作正常,而不是在 Fragments 中工作。

当我单击后退按钮时,向后过渡(弹出)效果很好。但是当我调用新片段时它不能正常工作。它只是在屏幕变化时闪烁。

我尝试将持续时间更改为 none.xml 的 50。我看到新屏幕从右侧出现。也试过10000。但它只是延迟了变化时间。

我正在使用导航组件。我这样定义:

        <action
            android:id="@+id/action_initFragment_to_settingFragment"
            app:destination="@id/settingFragment"
            app:enterAnim="@anim/enter_from_right"
            app:exitAnim="@anim/none"
            app:popExitAnim="@anim/exit_to_right"
            app:popEnterAnim="@anim/none"/>

这是怎么回事? 我认为这是因为 Z 指数。有没有办法给Z索引属性?

发生这种情况是因为 z 索引。活动有不同的深度。但是,我猜 Fragments 具有相同的深度。因此,当 A Fragment 切换到 B Fragment 时,它们处于相同的深度,并且过渡未正确显示。

解决方案是以编程方式为屏幕提供 Z 索引,如下所示:

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        ViewCompat.setTranslationZ(view, 1F)
    }
这里的

1F是深度的索引。

有趣的是,数值越大影子越大。如果你给 100F,那么它会在下面产生巨大的阴影。当值为1F时,我看不到任何阴影。