【独具匠心http://my.csdn.net/songxin393764941 未经允许严禁转载,请尊重作者劳动成果。我的博客】
今天给大家带来的是一个等待的动画效果↓
看到我的照片有没有被迷到啊随后我只能感叹一下岁月了
好,OK,下面我们来分析一下这个效果,收下我们可以看出这个动画是由三个动画组成,
1:6个小圆点的旋转.
2:一个弹一下的效果
3:一个水波纹扩散的效果
好的,下面我们就一个一个的来说一下。
首先我们说一下这个6个小球的旋转,我们都可以看出,这个六个小球也是在画一个大圆,所以我们只要把大圆的半径确定了之后,在计算每个小圆的角度,再不断的进行绘制是不是就可以了?对,没错,就是这样的。那么在这之前我们是不是应该找到中间大圆的中心点,并且计算出半径啊。
其实这个中心点就是屏幕对角线的一半,请看代码
【独具匠心http://my.csdn.net/songxin393764941 未经允许严禁转载,请尊重作者劳动成果。我的博客】
通过在onSizeChanged方法中的计算之后,我们就可以确定了中间空心圆的中心点了,那么我们还要确定的就是这个每个小圆每次的角度,所以我们需要在绘制之前进行起算。因为会不止一次使用,所以我就直接写了一个方法,大家请看!
上面我已经把注释写的很清楚了,不懂的也可以留言再问,我会给大家解释的。
看完上面的代码,之后,你肯定在想,如果一直绘制小圆,最后小圆是不是就不止6个啊 ,是不是每绘制一次就+6个小圆啊,没错,所以我们在绘制之前还需要把之前的擦掉,怎么擦呢?很简单,调用canvas.drawColor(mSplashBgColor);把整个画布画成白色不就完事了。
【独具匠心http://my.csdn.net/songxin393764941 未经允许严禁转载,请尊重作者劳动成果。我的博客】
那么我们应该怎么启动呢?又到了这次的亮点了。再分析下啊,刚才我们也说了,这个动画效果是由三个效果组成的,也可以说是动画分为三个状态,那么可不可用一个变量引用不同的对象来达到不同的效果呢?答案是肯定的,这就是策略模式!所以我在这里写了一个抽象类。