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

MotionLayout实现的启动页无动画且无法跳转至下一个Fragment如何解决

修复方案

问题根因

你遇到的两个问题都是配置和代码漏写导致的:

  • MotionLayout的过渡动画配置了点击触发、且自动过渡属性设为仅跳转到起始状态,不会自动播放
  • Activity中仅配置了动画结束的监听逻辑,没有主动触发动画执行

1. 修改MotionLayout过渡配置

调整Transition节点的属性,删除不必要的点击触发规则:

<Transition
    motion:constraintSetEnd="@+id/end"
    motion:constraintSetStart="@id/start"
    motion:duration="1000"
    motion:autoTransition="animateToEnd">
   <KeyFrameSet>
       <KeyAttribute
           motion:motionTarget="@+id/imageView8"
           motion:framePosition="0"
           android:scaleX="1.2" />
       <KeyAttribute
           motion:motionTarget="@+id/imageView8"
           motion:framePosition="0"
           android:scaleY="1.2" />
       <KeyAttribute
           motion:motionTarget="@+id/imageView8"
           motion:framePosition="20"
           android:scaleX="0.7" />
       <KeyAttribute
           motion:motionTarget="@+id/imageView8"
           motion:framePosition="20"
           android:scaleY="0.7" />
       <KeyAttribute
           motion:motionTarget="@+id/imageView8"
           motion:framePosition="40"
           android:scaleX="0.7" />
       <KeyAttribute
           motion:motionTarget="@+id/imageView8"
           motion:framePosition="40"
           android:scaleY="0.7" />
       <KeyAttribute
           motion:motionTarget="@+id/imageView8"
           motion:framePosition="100"
           android:scaleX="50.0" />
       <KeyAttribute
           motion:motionTarget="@+id/imageView8"
           motion:framePosition="100"
           android:scaleY="50.0" />
   </KeyFrameSet>
</Transition>

<ConstraintSet android:id="@+id/start">
    <Constraint
        android:layout_height="287dp"
        android:layout_width="313dp"
        android:id="@+id/imageView8"
        motion:layout_constraintBottom_toBottomOf="parent"
        motion:layout_constraintEnd_toEndOf="parent"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintVertical_bias="0.487"
        android:layout_marginBottom="180dp" />
</ConstraintSet>

<ConstraintSet android:id="@+id/end">
    <Constraint
        android:layout_height="335dp"
        android:layout_width="303dp"
        android:id="@+id/imageView8"
        motion:layout_constraintTop_toTopOf="parent"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintEnd_toEndOf="parent"
        android:layout_marginTop="293dp"/>
</ConstraintSet>

说明:额外删除了start约束里不存在的imageView7依赖,把end约束里的绝对定位替换为通用的marginTop适配不同分辨率设备


2. 修改SplashActivity代码

添加主动触发动画的逻辑,避免autoTransition因场景加载延迟不生效:

class SplashActivity : AppCompatActivity() {

    private lateinit var binding: ActivitySplashBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        supportActionBar?.hide()

        binding = ActivitySplashBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.motionLayout.setTransitionListener(object : MotionLayout.TransitionListener {
            override fun onTransitionStarted(
                motionLayout: MotionLayout?,
                startId: Int,
                endId: Int
            ) {

            }

            override fun onTransitionChange(
                motionLayout: MotionLayout?,
                startId: Int,
                endId: Int,
                progress: Float
            ) {

            }

            override fun onTransitionCompleted(motionLayout: MotionLayout?, currentId: Int) {
                val intent = Intent(this@SplashActivity, MainActivity::class.java)
                startActivity(intent)
                finish()
            }

            override fun onTransitionTrigger(
                motionLayout: MotionLayout?,
                triggerId: Int,
                positive: Boolean,
                progress: Float
            ) {

            }

        })
        // 新增:主动触发动画执行
        binding.motionLayout.transitionToEnd()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:15:04