Android 中缺少slide_in_right 和slide_out_left 动画?

Rob*_*b N 10 android android-animation android-jetpack-navigation

我正在尝试使用 Jetpack 导航组件。这里的文档讨论了动画过渡。示例代码使用动画slide_in_right和 ,slide_out_left其行为就像它们默认存在一样 - 没有关于如何创建它们的说明。

<action
    ...
    app:enterAnim="@anim/slide_in_right"
    app:exitAnim="@anim/slide_out_left"
    app:popEnterAnim="@anim/slide_in_left"
    app:popExitAnim="@anim/slide_out_right" />
Run Code Online (Sandbox Code Playgroud)

但是,当我单击如下所示的属性时,在导航图资源的设计视图中,我只看到slide_in_leftside_out_right。为什么另外两个人不在?

我的目标是制作类似推/弹出的动画,其中新视图从右侧进入,旧视图从左侧移出。(相反,“弹出”回到导航堆栈中。)

我确实看到了一些关于这些动画的其他问题,但他们的答案很旧,而且听起来可能存在错误,所以我想知道 2020 年现在的答案是什么。

在此输入图像描述

在此输入图像描述

小智 18

Slide_in_rigth 和 Slide_out_left 动画可以在 SDK 中找到,但是当我尝试从 XML 使用时,出现以下错误:

AAPT:错误:资源 android:anim/slide_in_right 是私有的。

所以我将动画内容复制到我的资源文件中,如下所示:

在此输入图像描述

以下是我从 Android SDK 复制的动画内容。 对于slide_in_right.xml:

 <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="50%p" android:toXDelta="0"
            android:duration="@android:integer/config_mediumAnimTime"/>
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="@android:integer/config_mediumAnimTime" />
    </set>
Run Code Online (Sandbox Code Playgroud)

对于slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-50%p"
        android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>
Run Code Online (Sandbox Code Playgroud)

现在它们可以与@animator一起使用,所以我添加到我的navigation.xml中,如下所示:

    <action
        ...
        app:enterAnim="@animator/slide_in_right"
        app:exitAnim="@animator/slide_out_left" />
Run Code Online (Sandbox Code Playgroud)

它对我有用,我希望它能帮助你。