高度自定义的粒子喷发效果-Confetti
原文地址:It’s parfetti time!
It’s parfetti time!
实际名称是Confetti,但是的一个朋友认为parfetti是一个更好的名字。
在紧张开发Robinhood Gold之余,由于要等待设计等最终定稿,所以我有时间去弄我将用在Robinhood的第二个开源项目。今天很高兴宣布发布出来给大家试试。
额, 它是什么东西呢?
Confetti是一个可以在任何时候任何地方随机发射纸屑的粒子系统库。可以轻松自定义,非常强大。比如,你可以指定随机发射的源(圆点或者线),物理约束(速度,加速度以及旋转等),以及对纸片(Confetto)(是的,就是这个单词,它是confetti的单数形式 )的任何实现。然后这个library将在屏幕上显示你指定的纸屑发射效果。
这里是爆炸效果的配置案例:
new ConfettiManager(context, generator, confettiSource, container)
.setTTL(1000)
.setBound(explosionBound)
.setVelocityX(0, defaultVelocityFast)
.setVelocityY(0, defaultVelocityFast)
.enableFadeOut(Utils.getDefaultAlphaInterpolator())
.setRotationalVelocity(180, 180);
结果如下:
自定义
更详细的文档请阅读 Github README。
自定义这个library的基本方式就是设置 ConfettiManager上的各种配置变量来得到适合你的动画。你可以使用bitmap建立confetto,也可以提供一个自定义的Confetto类(实现的例子请参考BitmapConfetto)。
除此之外还支持一些属性,比如纸片触及边界或者生命结束的时候的淡出行为以及拖动。下面是一个自定义的触摸与拖动行为的例子:
你可以使用这个library去实现很多很酷的效果,比如Periscope的心形冒泡效果或者Facebook Messenger的金币落下动画效果。
性能
在Robinhood里,我们总是在意性能的问题。confetti manager内部回收了confetto对象,因此连续不断的confetti流并不会毁掉内存。再者,因为每个confetto只需知道如何绘制
bitmap,所以你只需为每个bitmap分配一次。最后,我们预先计算了许多动画参数。因此每个动画更新的计算都是非常直接的。总之,除非你一次性的满屏显示很多纸片,否则你不用担心掉帧的问题。
这就本文的内容,如果你有任何需求或者发现bug请在这里提交issues。