如何使用导航组件在目标之间实现从底部滑动的动画?

3
这里是我的代码,用于滑入和滑出动画,如何在目标之间使用导航组件从底部滑动?enter image description here
  <action
            android:id="@+id/action_nav_intro_to_nav_permission"
            app:destination="@id/nav_permission"

            app:popUpTo="@id/nav_intro"
            app:popUpToInclusive="true"

            app:enterAnim="@anim/slide_in_right"
            app:exitAnim="@anim/slide_out_left"
            app:popEnterAnim="@anim/slide_in_left"
            app:popExitAnim="@anim/slide_out_right"
            />
2个回答

3
在 `res/anim` 文件夹下创建两个动画 XML 资源:
`slide_down.xml`:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="400"
        android:fromYDelta="0"
        android:toYDelta="100%" />
</set>

这将把Y轴上的内容从0%转换到100%,也就是向下滑到底部。 slide_up.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="400"
        android:fromYDelta="100%"
        android:toYDelta="0" />
</set>

这将把Y轴上的内容从100%到0%进行翻译,也就是从底部向上滑动。

然后按照以下方式修改导航操作的XML:

    <action
        android:id="@+id/action_nav_intro_to_nav_permission"
        app:destination="@id/nav_permission"
    
        app:popUpTo="@id/nav_intro"
        app:popUpToInclusive="true"
    
        app:enterAnim="@anim/slide_up"
        app:exitAnim="@anim/slide_down"
        app:popEnterAnim="@anim/slide_up"
        app:popExitAnim="@anim/slide_down"
   />

编辑:2021年5月19日

@Amin在评论中正确指出,您的GIF没有显示退出动画向下滑动,请尝试使用以下替代方法:

app:enterAnim="@anim/slide_up"
app:exitAnim="@null"
app:popEnterAnim="@null"
app:popExitAnim="@anim/slide_down"

1
唯一可能需要更改的是将exitAnim和popEnterAnim设置为空动画,以便它与问题中的gif完全相同。 - undefined
1
@阿明,谢谢你的好建议,我已经相应地编辑了我的回答。 - undefined

1
创建一个anim XML文件,通过使用这个简单的代码,你可以实现目标。 还有这些区域:

引用块

class FragmentA : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val inflater = TransitionInflater.from(requireContext())
    exitTransition = inflater.inflateTransition(R.transition.slide_down)
}


class FragmentB : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val inflater = TransitionInflater.from(requireContext())
    enterTransition = inflater.inflateTransition(R.transition.slide_up)
}

1
请问你能否添加动画效果的XML代码,让内容从底部滑入?谢谢。 - undefined
抱歉回复晚了,这是滑动上升的XML代码:<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_shortAnimTime" android:fromYDelta="100%p" android:toYDelta="0" /> - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接