代码之家  ›  专栏  ›  技术社区  ›  Rob N

在Android中缺少滑入滑出左动画?

  •  0
  • Rob N  · 技术社区  · 5 年前

    我正在尝试使用Jetpack导航组件。这个 docs here 讨论设置过渡动画。示例代码使用动画 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" />
    

    但当我点击如下所示的属性时,在导航图资源的设计视图中,我只看到 slide_in_left side_out_right .为什么其他两个不在那里?

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

    我确实看到了一些关于这些动画的其他问题,但它们的答案很旧,听起来可能有一个bug,所以我想知道2020年的答案是什么。

    enter image description here

    enter image description here

    0 回复  |  直到 5 年前
        1
  •  9
  •   kiroglue    5 年前

    slide_in_rigth和slide_out_left动画可以在SDK中找到,但当我尝试使用from XML时,我遇到了以下错误:

    AAPT:error:resource安卓:右侧的动画/幻灯片是私有的。

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

    enter image description here

    以下是我从Android SDK复制的动画内容。 对于幻灯片_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>
    

    用于向左滑出。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>
    

    现在它们可以与@animator一起使用,所以我添加到了导航中。xml格式如下:

        <action
            ...
            app:enterAnim="@animator/slide_in_right"
            app:exitAnim="@animator/slide_out_left" />
    

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