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

时间:2019-07-24 22:42:44

标签: android-studio android-motionlayout

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

通常,如果将其设置为最后消失,则动画会逐渐消失。但是我希望它突然变得sa废。

我正在使用动作布局和某种程度的关键帧理解方法,但是如何实现可见性呢?

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以如下所示设置第0,99和第100帧位置的alpha值。

 <KeyFrameSet>

        <KeyAttribute
            android:alpha="1"
            motion:framePosition="0"
            motion:motionTarget="@id/textView" />
        <KeyAttribute
            android:alpha="1"
            motion:framePosition="99"
            motion:motionTarget="@id/textView" />
        <KeyAttribute
            android:alpha="0"
            motion:framePosition="100"
            motion:motionTarget="@id/textView" />

    </KeyFrameSet>

通过这种方式,textview将从第99帧淡出到第100帧,但是看起来几乎突然消失了。

gif image showing a sample animation

答案 1 :(得分:0)

如果有人遇到像我这样的人,我想在这里留下答案:

动画alpha并控制其框架可以完成这项工作,但是当您希望从布局实际将视图gone用作视图时,我需要为此使用visibility

我在another post中编写了它,但为了便于阅读,将其保存在这里:
背景视图,当gonealpha时应为0,并且一旦alpha变得大于0时,只需visible时间,但运动不应该使visibility成为动画。

  • KeyFrameSet配置visibility,因此在第0帧visibilitygone,并从第1帧 visibilityvisible
  • 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>

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

Visible = 0
Invisible = 4
Gone = 8