我正在尝试使用MotionLayout制作动画,并且我需要隐藏一些元素。
我在单个元素中测试了可见性属性,它可以工作,但是为了使XML更短,我希望能够仅指定一个包含所有这些元素的组(来自ConstraintLayout帮助器)
像这样
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Transition
app:constraintSetStart="@id/start"
app:constraintSetEnd="@id/end"
app:duration="300">
<OnSwipe
app:touchAnchorId="@id/details_group"
app:touchAnchorSide="bottom"
app:dragDirection="dragDown"
/>
</Transition>
<ConstraintSet
android:id="@+id/start">
<Constraint
android:id="@+id/details_group"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
app:constraint_referenced_ids="detail_value_topl,detail_icon_topl,detail_value_topr" />
</ConstraintSet>
<ConstraintSet
android:id="@+id/end">
<Constraint
android:id="@+id/details_group"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="visible"
app:constraint_referenced_ids="detail_value_topl,detail_icon_topl,detail_value_topr" />
</ConstraintSet>
</MotionScene>
但这是行不通的,不知道如何使它行得通吗?
另外,我宁愿不要使用alpha ,因为所有约束都已设置,因此当它们消失时,容器将调整大小
最佳答案
而不是在Constraint上声明可见性,您应该将可见性声明为自定义属性。因此,对于第一个约束,请尝试以下操作:
<Constraint
android:id="@+id/details_group"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="detail_value_topl,detail_icon_topl,detail_value_topr">
<CustomAttribute
motion:attributeName="visibility"
motion:customIntegerValue="8" />
</Constraint>
对于第二个约束,请尝试此操作
<Constraint
android:id="@+id/details_group"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="detail_value_topl,detail_icon_topl,detail_value_topr">
<CustomAttribute
motion:attributeName="visibility"
motion:customIntegerValue="0" />
</Constraint>
通过将可见性声明为自定义属性,可以帮助运动布局在可见性值之间正确插值。哪个int值是哪个可见性有点不直观,但是它们的定义如下
Visible = 0
Invisible = 4
Gone = 8
关于android - 是否可以使用MotionLayout设置组可见性的动画?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57034120/