12

ConstraintLayout2.0一篇写不完之MotionEffect

 3 years ago
source link: https://blog.csdn.net/eclipsexys/article/details/117393514
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

166ae58c3c70e1ead210dd9d30672a20.png

点击上方蓝字关注我,知识会给你力量

1ea624d13319436ca7ed1f8aa44ba6ea.png

MotionEffect

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

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

da674726b61b29b14c748b04a24c5590.gif fade-default

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

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

46fc51ef33543cf489a64db9dd8037b7.png motion-effect-1

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

f866f6aacfd830d7c3b65a81cc846cca.gif fade-helper

可以查看下面的demo。

Controling which views get the effect

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

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

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

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

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

4deabbb95cc0ff307855a3e3c8d55846.gif fade-menu2

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

Custom effect

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

例如,要得到以下动画。

1ddcb9e50ccdbb788443f1e09facaabb.gif fade-custom

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

在layout xml中:

在motion scene中:

本文译自 https://github.com/androidx/constraintlayout/wiki/MotionEffect

向大家推荐下我的网站 https://xuyisheng.top/  点击原文一键直达

专注 Android-Kotlin-Flutter 欢迎大家访问

本文原创公众号:群英传,授权转载请联系微信(Tomcat_xu),授权后,请在原创发表24小时后转载。

< END >

作者:徐宜生

更文不易,点个“三连”支持一下????


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK