一个蝴蝶飞舞的 dialog

2,518 阅读1分钟
原文链接: www.jianshu.com

有幸在鸿洋的一篇Android FoldingLayout 折叠布局 原理及实现(一)中,学习到了Matrix的setPolyToPoly操作,于是着想到了如何实现这样一个的动画效果。
先上图:


butterfly.gif


项目地址,gif有点掉帧,完整效果直接把项目clone下来试试就行了。

整体思路由三个部分组成:
1.蝴蝶的绘制。
2.折叠动画。
3.细节抖动。

下面大概描述一下实现过程:

蝴蝶的绘制

蝴蝶的绘制使用的是svg+图片融合PorterDuffXfermode,对 这并不是一张图片,也就是说蝴蝶上的花纹是可以随意变化的。
在布局中添加花纹代码如下:

    

关于svg的转化我并没有使用常见的解析方式;而是使用的是SVG2Drawable,去除了关于svg的解析过程,直接使用生成后的path代码。
在组件初始化的时候使用PorterDuffXfermode生成相关花纹的蝴蝶图片。

折叠动画

折叠的原理还是跟文章头部所说到的Android FoldingLayout 折叠布局 原理及实现(一)与其原理一致,主要判断好两支翅膀的矩形块与ToPoly的变化,这里不再复述了,如果需要了解该api的话可以去看看鸿洋的博客,我将这些变化都封装在ButterFlyDrawable中方便更改视图效果,并不仅仅使用在dialog之中。

细节抖动

如果仅仅是蝴蝶扇翅膀,我觉得不怎么生动,为此我还增加细节抖动,使蝴蝶扇动的更逼真点。

如果你喜欢这个动画的话,欢迎点赞和star我的项目