程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人

本专栏专注分享Android进阶内容,后续会持续更新,喜欢的话麻烦点击关注一下

前言:

作为新世纪的“宝呗”青年,支付宝已经成为我们大部分人生活不可分割的一部分,所以,经常使用支付宝的我们不可避免在里面养起来小鸡,种起了树。

那蚂蚁森林的水滴是我们种树时最喜欢的东西,有这能量我们的树就可以茁壮成长,有朝一日成为一颗真正的树。

现在,Android程序员来告诉大家这个效果如何实现。

老规矩还是先上GIF

也许看到这个图,你就不想再继续看下去了,心想这个动画很简单啊,不就是创建循环创建view,再给每个view的动画

每个view的开始运动的方向随机,再给一个加速器就搞定了嘛,如果你也是这样想那就该把这个文章看完了

分析:

  • 首先创建水滴动画、缩放伴随透明度变化
  • 消失时缩放伴随移动
  • 水滴展示中是一直上下浮动的
  • 每个水滴上下浮动的方向不定
  • 每个水滴运动的速度时而快时而慢(这点也许你看不出,所以我再把抖动的范围加大再来一个GIF)

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第1张图片

首先我们肯定不能用每个view对应一个动画来处理,因为如果我是100低水滴,那岂不是要100个动画,这不得卡死呀,所以肯定是一个动画来完成

开始我第一想到的也是用ValueAnimator来做,但是一个ValueAnimator怎么去控制每个view的运动方向呢,有可能你会说每个view在初始化的时候给一个反向,确实可以解决运动方向不同的问题

但是怎么解决view运动的快慢不一样,并且时而快时而慢呢,并且每个view的运动规律根本不一样,最后我选择了handler来处理。


程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第2张图片


正题

下面的讲解我将会贴出重要部分的代码,也就是思路关键点,完整代码还是请clone项目。

  • 首先创建view

创建view代码块:


程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第3张图片


解释


程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第4张图片


  • 动画显示view:

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第5张图片


  • 接下来为view设置一个初始的随机加速度(其实也是随机在已有的值中选取,因为速度不能相差太大)

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第6张图片


  • 接下来就是开启动画,使用handler设置view的偏移量了,这部分也是很关键的,还包括了处理水滴时而快时而慢的处理

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第7张图片


  • 接下来水滴点击后的消失动画

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第8张图片

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第9张图片


  • 处理界面销毁

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第10张图片


这里动效就完了,运行就能达到想要的样子了,但是我的工作并没完,打开profiler一看OMG,在初始化view的地方内存剧增,数量稍稍多一点(10个)还会卡主,看来还的优化啊

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第11张图片

很明显private double getX_YRandom(List choseRandoms, List saveRandoms)这个方法走了太多次

原因就在于我是循环创建view,并且在这个循环内为view随机创建位置,但是为了不完全重合,我这里又一次循环知道是一个不同的值为止,也就是说这里双重循环了

  • 优化随机取用一个值后,就把这个值从集合移除,这样不就不会取到一样的值了么

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第12张图片


  • 顺便提一下有可能我们在创建水滴时,父容器还未初始化完成,处理如下

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第13张图片


到这里就真的完了,优化后实测200个都没有一点卡顿,读者可以根据自己需求优化水滴的位置逻辑算法,来个70个水滴GIF.

程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人_第14张图片

结语
为了不影响阅读,我展示的部分源码都是图片

你可能感兴趣的:(Android进阶学习,Android优化,Android,程序员,IT,蚂蚁森林,支付宝,源码)