编排 Android 运动布局动画

Orchestrating Android Motion Layout animations

我有一个 xml 布局,我想在用户单击按钮时实现一些动画,所以我想到了将新的 MotionLayout 与 MotionScene 一起使用。 在布局中,我有一个必须向上滑动的背景 FrameLayout,以及一个必须在用户单击时出现(alpha 属性 动画)的 ImageView;问题是首先布局应该向上滑动然后出现 ImageView,但是在 MotionScene 的 Transition 中我只能指定一个起始 ConstraintSet 和一个结束 ConstraintSet 但不能指定中间 ConstraintSet;我想过使用 KeyAttributes,但它们不允许我设置背景布局的高度,如果我将它们与 translationY 属性一起使用(例如)动画的 50%,那么它会保持原样吗? 另外,如何从 java 代码开始一个 MotionLayout 动画? 提前致谢。

关于使用 KeyAttribute 更改视图高度的问题,请使用

<KeyPosition
  motion:keyPositionType="parentRelative"
  motion:percentHeight="1"
  motion:percentY="0"
  motion:percentX="0"
  motion:framePosition="50"
  motion:motionTarget="@id/sliding_view"/>

这会将视图固定到左上角(使用 percentX 和 percentY)并将高度增加到动画的 50% 处。

然后为图像视图设置动画:

<KeyAttribute 
  motion:motionTarget="@id/image_view"
  motion:framePosition="50"
  android:alpha="0"/>

从 java 代码开始运动场景转换:

MotionLayout motionLayout = findViewById(R.id.motion_layout)   
motionLayout.transitionToState(R.id.state)