在滑动动画之后,我正在使用MotionLayout
和<MotionScene />
来制作bottomSheet View
内容的动画。
view_player_status_margin
到gone
的可见性显示一个视图visible
(不使用alpha
,因为另一个视图通过约束链接到我要显示的视图上。)
在<Constraint />
中使用标准<ConstraintSet />
没关系,但是当我将可见性链接到<KeyAttribute />
以使视图仅出现在动画的最后一帧时,它不会遵循特定于框架的规则位置。
我对<KeyAttribute />
的用法似乎是正确的,因为它适用于其他两个视图的alpha。
将KeyAttribute
与visibility
属性一起使用是否有特定的限制?
<?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>
答案 0 :(得分:1)
我想做这样的事情,作为一个初学者,这让我有些困惑,但是我想分享到目前为止我可以做的事情。
对我来说,我找不到KeyAttribute
的{{1}},所以我不得不使用visibility
:
CustomAttribute
以下是<KeyAttribute
motion:framePosition="0"
motion:motionTarget="@id/background">
<CustomAttribute
motion:attributeName="visibility"
motion:customIntegerValue="8" />
</KeyAttribute>
的相应整数值:
visibility
因此,出于我的需要,我有一个背景视图,我希望将其Visible = 0
Invisible = 4
Gone = 8
从alpha
动画到0
的动画。当1
为gone
时,背景视图应该为alpha
,并且一旦0
大于alpha
时,就一直保持0
,但我根本不需要visible
的任何动画。
配置visibility
对我来说还不够,我不得不让运动忽略背景视图的动画KeyFrameSet
。
当然,我必须为visibility
和visibility
约束集设置背景视图的@id/start
,以下是@id/end
演示的所有这些内容:
MotionScene