【问题标题】:Motion Layout Animation Not Play运动布局动画不播放
【发布时间】:2021-01-22 22:47:34
【问题描述】:

我有一个动作布局,我想在动画结束时启动另一个活动。所以我有两个问题:

  1. 我为动作布局创建了这个描述文件:

<Transition
    android:id="@+id/starttoend"
    motion:constraintSetEnd="@+id/end"
    motion:constraintSetStart="@id/start"
    motion:duration="800" />

<Transition
    android:id="@+id/deley"
    motion:constraintSetEnd="@+id/deleyLayout"
    motion:constraintSetStart="@+id/end"
    motion:duration="800" />

<ConstraintSet android:id="@+id/start">
    <Constraint
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/_80sdp"
        android:rotation="120"
        motion:layout_constraintBottom_toBottomOf="parent"
        motion:layout_constraintEnd_toEndOf="parent"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>

<ConstraintSet android:id="@+id/end">
    <Constraint
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="0dp"
        android:rotation="0"
        motion:layout_constraintBottom_toBottomOf="parent"
        motion:layout_constraintEnd_toEndOf="parent"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>

<ConstraintSet android:id="@+id/deleyLayout">
    <Constraint
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="0dp"
        motion:layout_constraintBottom_toBottomOf="parent"
        motion:layout_constraintEnd_toEndOf="parent"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>

此代码为图像视图设置动画,然后等待 800 毫秒。我的问题是当我将motion_layout.transitionToEnd() 设置为活动时,动画没有开始。

  1. 当我在Transition Tag 中使用motion:autoTransition="animateToEnd" 属性,并将监听器设置为使用Intent 的运动布局时,Activity 将变为黑色并且不显示任何内容,然后启动Intent 活动。在我的日志中,我有两个“完成”:

         motion_splash.addTransitionListener(object : MotionLayout.TransitionListener {
         override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
         }
         override fun onTransitionChange(
             p0: MotionLayout?, p1: Int, p2: Int, p3: Float
         ) {
         }
         override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
             Log.i("completed" , "Done")
             startActivity(Intent(this@SplashScreenActivity, MainActivity::class.java))
             finish()
         }
         override fun onTransitionTrigger(
             p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {
         }
     })
    

你能帮帮我吗?!

【问题讨论】:

    标签: android android-motionlayout


    【解决方案1】:

    测试 p1 == R.id.end 以确保您已完成转换。

    确保您正在运行 ConstraintLayout2.0.1

    【讨论】:

      【解决方案2】:

      如果您看到完成了两次,这意味着您的转换可能在屏幕尚未准备好时在布局过程中被调用了两次。

      请将初始化代码移动到 onResume 或任何它应该开始的地方,并确保在 onResume 之后完成。必须在 onCreate() 中添加 TransitionListener

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        • 2022-12-09
        • 2018-08-19
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多