MotionLayout 中的 KeyAttribute 在视图“可见性”更改时被忽略

smo*_*ora 5 android android-motionlayout

在滑动动画之后,我正在使用MotionLayout<MotionScene />为bottomSheetView内容设置动画。

开始结束场景之间,我想view_player_status_margin使用从gone到的可见性来显示一个视图visible(不使用,alpha因为另一个视图通过约束链接到我想要显示的视图)。

可以使用标准<Constraint />in <ConstraintSet />,但是当我将可见性链接到 a<KeyAttribute />以使视图仅出现在动画的最后一帧时,它不会遵循特定于帧的规则位置。

我的使用<KeyAttribute />似乎是正确的,因为它适用于其他两个视图的 alpha。

使用KeyAttributewithvisibility属性是否有特定限制?

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <Transition
        app:constraintSetEnd="@+id/player_scene_set_expanded"
        app:constraintSetStart="@+id/player_scene_set_collapsed"
        app:motionInterpolator="easeIn">

        <KeyFrameSet>

            <KeyAttribute
                android:visibility="gone"
                app:framePosition="80"
                app:motionTarget="@id/view_player_status_margin" />

            <KeyAttribute
                android:alpha="0"
                app:framePosition="20"
                app:motionTarget="@id/view_player_collapsed" />

            <KeyAttribute
                android:alpha="1"
                app:framePosition="20"
                app:motionTarget="@id/view_player_expanded" />

        </KeyFrameSet>

    </Transition>

    <ConstraintSet android:id="@+id/player_scene_set_collapsed">

        <Constraint
            android:id="@+id/view_player_collapsed"
            android:layout_width="0dp"
            android:layout_height="64dp"
            android:alpha="1"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

        <Constraint
            android:id="@+id/view_player_expanded"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:alpha="0"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view_player_status_margin"/>

        <Constraint
            android:id="@+id/view_player_status_margin"
            android:layout_width="0dp"
            android:layout_height="38dp"
            android:visibility="gone"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </ConstraintSet>

    <ConstraintSet android:id="@+id/player_scene_set_expanded">

        <Constraint
            android:id="@+id/view_player_collapsed"
            android:layout_width="0dp"
            android:layout_height="64dp"
            android:alpha="0"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

        <Constraint
            android:id="@+id/view_player_expanded"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:alpha="1"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view_player_status_line" />

        <Constraint
            android:id="@+id/view_player_status_line"
            android:layout_width="0dp"
            android:layout_height="38dp"
            android:visibility="visible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </ConstraintSet>

</MotionScene>
Run Code Online (Sandbox Code Playgroud)

Ahm*_*ndy 4

我想做这样的事情,作为一个初学者,这对我来说有点困惑,但我想分享一下我到目前为止可以做的事情。

对我来说,我找不到KeyAttributefor visibility,所以我不得不利用CustomAttribute

<KeyAttribute
   motion:framePosition="0"
   motion:motionTarget="@id/background">
   <CustomAttribute
       motion:attributeName="visibility"
       motion:customIntegerValue="8" />
</KeyAttribute>
Run Code Online (Sandbox Code Playgroud)

以下是相应的整数值visibility

Visible = 0
Invisible = 4
Gone = 8
Run Code Online (Sandbox Code Playgroud)

因此,根据我的需要,我有一个背景视图,并且我想要动画alpha01。背景视图应该是gonewhen alphais 0,并且oncealpha变得比一直0保持更大,但我根本visible不需要任何动画。 配置 a对我来说还不够,我必须告诉 Motion 忽略背景视图的动画。visibility
KeyFrameSetvisibility

当然,我必须设置visibility背景视图@id/start@id/end约束集,以下是MotionScene所有这些的演示:

Visible = 0
Invisible = 4
Gone = 8
Run Code Online (Sandbox Code Playgroud)