如何实现Activity到Fragment的MaterialSharedAxis转场?转场失效求助
核心问题分析
你代码里的关键错误是:在Activity中创建了Fragment实例并配置了转场参数,但提交事务时重新new了一个Fragment1(),导致之前设置的转场完全没被用到。
修正后的代码示例
Activity A 代码
// Activity A val fragment = Fragment1() // 配置进入转场:从Activity进入Fragment时的X轴平移动画 fragment.enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) // 配置返回转场:从Fragment返回Activity时的反向X轴平移动画 fragment.returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) supportFragmentManager.beginTransaction() .setReorderingAllowed(true) // 必须开启,确保Fragment事务的转场动画正常执行 .add(R.id.fragment_container_view, fragment) // 使用之前配置好转场的Fragment实例 .addToBackStack("fragment") .commit()
Fragment1 代码
class Fragment1 : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 这里可以重复配置转场(作为兜底),也可以只在Activity中配置 enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) } // 你的其他视图逻辑代码... }
额外注意事项
- 依赖检查:确保项目引入了足够新版本的Material Components库,转场动画需要依赖该库:
implementation "com.google.android.material:material:1.9.0" // 或更高稳定版本 - API版本要求:MaterialSharedAxis转场仅支持API 21及以上,确保你的
minSdkVersion >=21。 - 事务配置:
setReorderingAllowed(true)是Fragment转场动画生效的必要条件,它允许系统重新排序事务操作以配合动画执行。 - 转场类型区分:
enterTransition对应进入当前Fragment的动画,returnTransition对应从当前Fragment返回上一页面的动画;如果是Fragment之间的替换,还会用到exitTransition和reenterTransition。
内容的提问来源于stack exchange,提问作者Matthäus Winkler
相关产品推荐
相关产品推荐

