Activity间切换的默认动画是什么?如何在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
相关产品推荐
相关产品推荐

