运动布局动画不播放

问题描述

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

  1. 我为运动布局创建了这个Description文件:

<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>

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

  1. 当我在过渡标签中使用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?,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?,p2: Boolean,p3: Float) {
         }
     })
    

能帮我吗?!

解决方法

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

确保您正在运行ConstraintLayout2.0.1

,

如果您看到 done 两次,则表示您的转换可能在屏幕未准备好时在布局传递中被调用了两次。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...