android - 运动布局动画不播放
问题描述
我有一个动作布局,我想在动画结束时开始另一个活动。所以我有两个问题:
我为运动布局创建了这个描述文件:
<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()
为活动时,动画没有开始。
当我在转换标签中使用 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) { } })
你能帮我吗?!
解决方案
测试 p1 == R.id.end 以确保您已完成转换。
确保您正在运行 ConstraintLayout2.0.1
推荐阅读
- nginx - Python:使用 gunicorn 运行 Flask 会产生错误“无法找到应用程序对象”
- c# - 如何通过名称告诉使用相关的注册 MySession 类
- php - 不显示在 foreach 中启动的函数中的 shell_exec 的结果
- mysql-workbench - MySQLWorkbench 文本选择在黑色背景上显示黑色文本
- c++ - 复制省略直接基类初始化?
- objective-c - 从后台返回时iOS应用程序请求失败
- ruby-on-rails - Rails 5:可以使用 collection_check_boxes 将复选框字段写入数据库
- mfc - 多个基于 MFC 对话框的项目
- javascript - 如何处理 Redux 中 navigator.geolocation.getCurrentPosition() 的异步行为并将用户的位置存储在 Redux 状态?
- php - 如何使用 vuejs 将其实现为数组?