Android MotionLayout autoTransition 在 beta7 中不起作用
Posted
技术标签:
【中文标题】Android MotionLayout autoTransition 在 beta7 中不起作用【英文标题】:Android MotionLayout autoTransition not working in beta7 【发布时间】:2020-10-16 11:18:32 【问题描述】:我想在我的片段显示时自动启动动画。我已将autoTransition
属性设置为animateToEnd
,但没有任何反应。
我目前正在使用 constraintLayout beta7。当降级到 beta6 或更低时,除了片段进入屏幕时动画完成之外,什么也没有发生。
我已经将一个 TransitionListener 附加到 MotionLayout 并观察到以下内容:
这是 MotionScene xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@id/start"
motion:duration="1000"
motion:motionInterpolator="easeInOut"
motion:autoTransition="animateToEnd">
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint android:id="@id/splash_head_TextView">
<Layout
android:layout_
android:layout_
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="@id/topGuideLine"/>
<CustomAttribute
motion:attributeName="alpha"
motion:customFloatValue="0.0" />
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint android:id="@id/splash_head_TextView">
<Layout
android:layout_
android:layout_
android:text="@string/splash_head"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="@id/topGuideLine"/>
<CustomAttribute
motion:attributeName="alpha"
motion:customFloatValue="1.0" />
</Constraint>
</ConstraintSet>
</MotionScene>
【问题讨论】:
有时使用 beta7 可以工作。 10 次中有 1 次。使用 beta 4 就可以了。 【参考方案1】:我不知道为什么它不起作用。 但我确实看到了一些错误/可以改进的地方。
android:text="@string/splash_head" 不是布局命令 Α 是做 alpha 的更好方法
既然没有其他改变,这应该就是你所需要的。
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@id/start"
motion:duration="1000"
motion:autoTransition="animateToEnd">
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint android:id="@id/splash_head_TextView">
<PropertySet android:alpha="0.0" >
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint android:id="@id/splash_head_TextView">
<PropertySet android:alpha="1.0" >
</Constraint>
</ConstraintSet>
【讨论】:
我根据你的建议重构了我的代码(看起来更干净了)。但是动画仍然没有开始...... @walli 当开始约束集设置为app:currentState="@+id/start"
或使用transitionToState(R.id.start)
移动到时,它在beta6 中对我有用。似乎实际上刚刚在 beta7 中被打破。如果它仍然不适合您,介意分享您的布局吗?以上是关于Android MotionLayout autoTransition 在 beta7 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Android新控件之MotionLayout 动画管理布局简单介绍<一>
未调用 Android MotionLayout 过渡侦听器
带有 MotionLayout 的 Android 折叠工具栏 - 当 RecyclerView 为空/不可滚动时禁用运动