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

如何实现Activity到Fragment的MaterialSharedAxis转场?转场失效求助

MaterialSharedAxis转场从Activity到Fragment不生效的修复方案

核心问题分析

你代码里的关键错误是:在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:20:54