Android MotionLayout motionStaggered

问题描述 投票:0回答:1

我正在尝试使我的视图使用MotionLayout进行动画处理,但希望某些约束先于其他约束进行动画处理。我认为这是议案的目的:过渡的交错属性,但是我不知道它是如何工作的,也没有任何实例可以成功地在任何地方使用。使用MotionLayout的更新版本,似乎我们应该为各个约束设置motion:motionStagger,但是同样,我似乎也无法按照需要使它交错。我只能找到here的文档来解释增强的交错API,但我不知道如何使用它。

android animation layout motion
1个回答
0
投票

交错的实际数学可能有点混乱,但实际上

错开

动画的每个视图都被赋予Stager值(app:motionStagger)默认情况下,视图的交错值是视图列表中最顶部的视图到曼哈顿的距离。您可以通过属性手动设置值

这会为每个带有motionStagger标记的视图分配一个浮点交错值(忽略未标记的视图)。首先启动具有最低浮点值(V0)的视图。具有最高浮点值(Vn)的视图最后开始。

  • 对于任何交错值S(Vi)的视图
  • 具有TS的过渡交错值(从0.0-1.0)
  • 动画的持续时间是持续时间
  • 视图动画持续时间DS =持续时间*(1-TS)
  • 调用交错分数SFi =(S(Vi)-S(V0))/(S(Vn)-S(V0))
  • 视图从以下位置开始动画:(持续时间DS)* SFi

此数学可能令人困惑。这样一个实际的例子如果我有3个视图View1,View2,View3,则分别将motionStagger设置为2、5和7,动画持续时间设置为5秒。当我将过渡交错设置为0.4时,进度将如下所示:

The animation duration is 3.0 sec = 5 * (1- 0.4)

View1 stagger fraction = 0 = (2-2)/(7-2)
View1 starts at 0.0 sec 
View1 end    at 3.0 sec (0.0 + 3.0)

View2 stagger fraction = 0.6 = (5-2)/(7-2)
View2 starts at 1.2 sec (5.0-3.0) * 0.6
View2 ends   at 4.2 sec 1.2 + 3.0

View3 stagger fraction = 1
View3 starts at 2.0 sec (5.0 - 3.0) * 1
View3 ends   at 5.0 sec 
© www.soinside.com 2019 - 2024. All rights reserved.