我在 android studio 中使用运动布局来制作一个滚动的页面,看起来有点像 Twitter。我想在动画的最后将包含名称的布局的可见性设置为 GONE。
通常,如果您将其设置为最后消失,它会在动画中逐渐消失。但我希望它突然消失。
我正在使用运动布局并且有点理解关键帧,但是您如何使用可见性来做到这一点?
谢谢。
我在 android studio 中使用运动布局来制作一个滚动的页面,看起来有点像 Twitter。我想在动画的最后将包含名称的布局的可见性设置为 GONE。
通常,如果您将其设置为最后消失,它会在动画中逐渐消失。但我希望它突然消失。
我正在使用运动布局并且有点理解关键帧,但是您如何使用可见性来做到这一点?
谢谢。
我想在这里留下一个答案,以防有人遇到像我这样的情况:
动画alpha
和控制它的框架可以完成这项工作,但是当您希望视图实际上gone
来自布局时,我需要利用visibility
它。
我在另一篇文章中写了它,但为了便于阅读,将其保留在这里:
背景视图,应该是gone
when alpha
is 0
,并且 oncealpha
变得越来越大,而0
不仅仅是一直停留visible
,但运动不应该为visibility
所有内容设置动画。
KeyFrameSet
为visibility
,所以在第0 帧 visibility
是gone
,从第 1 帧 visibility
开始是visible
。visibility
背景视图的必需。@id/start
@id/end
visibiltyMode
为背景视图,因此运动将忽略为背景视图设置此属性的动画。ignore
@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
您可以为第 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 帧淡出,但看起来几乎是突然消失了。