You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Activity间切换的默认动画是什么?如何在Jetpack Navigation的Fragment中使用

实现Jetpack Navigation Fragment切换的缩放过渡动画

步骤1:创建缩放动画资源文件

在项目res/anim目录下新建4个动画文件,参数可根据实际需求调整时长、缩放比例:

  • nav_enter.xml(新Fragment进入时的放大动画)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <scale
        android:duration="300"
        android:fromXScale="0.8"
        android:fromYScale="0.8"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />
    <alpha
        android:duration="300"
        android:fromAlpha="0.8"
        android:toAlpha="1.0" />
</set>
  • nav_exit.xml(旧Fragment退出时的缩小动画)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <scale
        android:duration="300"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.8"
        android:toYScale="0.8" />
    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.8" />
</set>
  • nav_pop_enter.xml(回退时,上一级Fragment重新进入的放大动画)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <scale
        android:duration="300"
        android:fromXScale="0.8"
        android:fromYScale="0.8"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />
    <alpha
        android:duration="300"
        android:fromAlpha="0.8"
        android:toAlpha="1.0" />
</set>
  • nav_pop_exit.xml(回退时,当前Fragment弹出的缩小动画)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <scale
        android:duration="300"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.8"
        android:toYScale="0.8" />
    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.8" />
</set>

步骤2:给Navigation配置动画

方式1:单条跳转路径配置

在导航图对应<action>标签中添加动画属性即可:

<action
    android:id="@+id/action_fragmentA_to_fragmentB"
    app:destination="@id/fragmentB"
    app:enterAnim="@anim/nav_enter"
    app:exitAnim="@anim/nav_exit"
    app:popEnterAnim="@anim/nav_pop_enter"
    app:popExitAnim="@anim/nav_pop_exit" />

方式2:全局配置所有跳转动画

如果需要所有Fragment切换都使用该效果,可在代码导航时传入统一的NavOptions:

// Kotlin示例
val navOptions = NavOptions.Builder()
    .setEnterAnim(R.anim.nav_enter)
    .setExitAnim(R.anim.nav_exit)
    .setPopEnterAnim(R.anim.nav_pop_enter)
    .setPopExitAnim(R.anim.nav_pop_exit)
    .build()

// 导航时传入配置
findNavController().navigate(R.id.fragmentB, null, navOptions)

Java代码示例:

NavOptions navOptions = new NavOptions.Builder()
    .setEnterAnim(R.anim.nav_enter)
    .setExitAnim(R.anim.nav_exit)
    .setPopEnterAnim(R.anim.nav_pop_enter)
    .setPopExitAnim(R.anim.nav_pop_exit)
    .build();

Navigation.findNavController(view).navigate(R.id.fragmentB, null, navOptions);

实现效果

和预期的Activity跳转缩放效果一致,演示如下:
动画效果示例

内容的提问来源于stack exchange,提问作者Puntogris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:54:04