ConstraintLayout2.0之MotionEffect,简单的代码实现炫酷的动效!

ConstraintLayout2.0之MotionEffect,简单的代码实现炫酷的动效!_第1张图片

MotionEffect

MotionEffect是2.1中的一个新的MotionHelper,可以让你根据视图的整体运动方向,自动为其引用的视图添加关键帧。它可以简化很多过渡动画的创作。

为了更好地理解它的作用,请看下面的例子。这个例子只使用了MotionLayout的start和end功能,它自动创建了两种场景下的过渡效果。

ConstraintLayout2.0之MotionEffect,简单的代码实现炫酷的动效!_第2张图片

默认的两种状态之间的过渡做了一个线性插值的移动效果——这个展示结果是混乱的,并不令人愉快。

如果我们看这个例子,我们可以识别出只向西移动的元素(2、3、6、9),而其他元素则以其它不同的模式移动(1、4、5、7、8)。

ConstraintLayout2.0之MotionEffect,简单的代码实现炫酷的动效!_第3张图片

我们可以使用MotionEffect对这些元素应用淡入淡出的效果,给人带来更愉悦的效果。

ConstraintLayout2.0之MotionEffect,简单的代码实现炫酷的动效!_第4张图片

可以查看下面的demo。


    
    
    
    
    
    
    
    
    

    ...

    

Controling which views get the effect

首先,只有MotionEffect中引用的视图才有可能得到效果。

其次,默认情况下,我们会自动计算这些视图的主要移动方向(在北、南、东、西之间),只有与该方向相反移动的视图才会得到应用于它们的效果。

使用motionEffect_move=auto|north|south|east|west,你可以覆盖它来指定你想要效果应用到哪个方向。

你也可以使用motionEffect_strict=true|false来让这个效果严格地应用于(或不应用于)做这个运动的元素。

默认效果 默认情况下,效果将应用淡出/淡入;你可以通过以下属性控制alpha的数量以及效果的开始/结束。

app:motionEffect_start="keyframe"
app:motionEffect_end="keyframe"

ConstraintLayout2.0之MotionEffect,简单的代码实现炫酷的动效!_第5张图片

你也可以控制alpha和translation的数值。

app:motionEffect_alpha="alpha"
app:motionEffect_translationX="dimension"
app:motionEffect_translationX="dimension"

Custom effect

你也可以引用一个ViewTransition来代替默认的淡入淡出效果应用到widget上,只需设置motionEffect_viewTransition,你就可以无限制地控制你想要应用的效果类型。

例如,要得到以下动画。

ConstraintLayout2.0之MotionEffect,简单的代码实现炫酷的动效!_第6张图片

你可以创建一个ViewTransition,并在MotionEffect中引用它。

在layout xml中:

在motion scene中:


    
        
        
    

文末

您的点赞收藏就是对我最大的鼓励!
欢迎关注我,分享Android干货,交流Android技术。
对文章有何见解,或者有何技术问题,欢迎在评论区一起留言讨论!

你可能感兴趣的:(android后端)