是否可以使用MotionLayout设置组可见性的动画?

时间:2019-07-15 06:17:28

标签: android android-motionlayout

我正在尝试使用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 ,因为所有约束均已设置,以便在容器消失时调整其大小

1 个答案:

答案 0 :(得分:1)

您应该将可见性声明为自定义属性,而不是在“约束”上声明可见性。因此,对于您的第一个约束,请尝试以下操作:

     <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