运动布局:如何更改最后一帧的视图可见性

Poo*_*tyy 3 android-studio android-motionlayout

我正在 android studio 中使用运动布局来制作一个滚动的页面,看起来有点像 Twitter。我想在动画的最后将包含名称的布局的可见性设置为“GONE”。

通常,如果您将其设置为最后消失,它会在动画中逐渐消失。但我希望它突然消失。

我正在使用运动布局并且有点理解关键帧,但是如何通过可见性来做到这一点?

谢谢。

Ahm*_*ndy 5

我想在这里留下一个答案,以防有人像我一样遇到这种情况:

动画alpha和控制它的框架就可以完成这项工作,但是当您希望视图实际上来自gone布局时,我需要利用visibility它。

我在另一篇文章中写了它,但为了便于阅读,将其保留在这里:
背景视图,应该是何时gone,并且一次比一直保持更大,但运动不应该为所有内容设置动画。alpha0alpha0visiblevisibility

  • 配置KeyFrameSetvisibility,因此在第 0 帧 visibility处为gone,从第 1 帧 visibility开始为visible
  • 在约束集中设置visibility背景视图所需的值。@id/start@id/end
  • 在和约束集中设置visibiltyModeignore背景视图,因此运动将忽略为背景视图设置此属性的动画。@id/start@id/end
<MotionScene
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">

    <Transition
        android:id="@+id/transition"
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@id/start"
        motion:duration="@integer/standard_duration">

       <KeyFrameSet>
           <KeyAttribute
               motion:framePosition="0"
               motion:motionTarget="@id/background">
               <CustomAttribute
                   motion:attributeName="visibility"
                   motion:customIntegerValue="8" />
           </KeyAttribute>

           <KeyAttribute
               motion:framePosition="1"
               motion:motionTarget="@id/background">
               <CustomAttribute
                   motion:attributeName="visibility"
                   motion:customIntegerValue="0" />
           </KeyAttribute>
       </KeyFrameSet>

    </Transition>

    <ConstraintSet android:id="@+id/start">
        ...

        <Constraint
            android:id="@+id/background"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:alpha="0.5"
            android:visibility="gone"
            motion:visibilityMode="ignore"
        />
    </ConstraintSet>

    <ConstraintSet android:id="@+id/end">
        ...

        <Constraint
            android:id="@+id/background"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:alpha="0.5"
            android:visibility="visible"
            motion:visibilityMode="ignore"
        />
    </ConstraintSet>

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

顺便说一句,相应的整数值为visibility

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