可以看到本例有两个动画效果:
- 背景色在不停的渐变当中
- 点击鼠标左键,点击处会有一个小球生成,并落地
分析这两个动画:
- 背景色的渐变:
这个动画效果是使用属性动画完成的。
首先实例化通过ObjectAnimator实例化一个属性动画的ValueAnimator对象。这个动画要改变的是背景颜色,从RED色渐变到BLUE色。
通过ValueAnimator初始化动画的持续时间、重复次数、到最后一帧后的动作等。
最后start()开始动画。
- 小球动画:
1. 实例化一个ShapeHolder形的ArrayList对象balls。
2.自定义函数addBall(float x, float y):实现增加一个(x,y)位置的小球
(1)初始化一个圆形实例circle,设置其半径为50f。
(2)使用这个圆形circle实例化一个ShapeHolder实例sh,初始化其起始位置
(3)初始化一个画刷paint,设置画刷要画的图形(一个RadialGradient对象,设置圆心、半径、颜色、模式)
(4)将这个画刷设置为sh使用的画刷
(5)balls添加sh
3. 为鼠标点击事件添加监听器
(1)调用addBall,在鼠标点击位置添加一个小球
(2)为这个小球添加两部分动画:
-小球运动——这是个动画集,包含三个部分
--小球下降
--小球被挤压、拉伸(包含两个挤压、两个拉伸)
--小球弹起
-小球消失——这是个动画
--小球透明度越来越大,全部透明时将这个小球移除
4. 刷屏函数onDraw()
(1)从ShapeHolder形的ArrayList对象balls中不断取出元素
(2)平移画布
(3)绘制
(4)重置这个画布
关于这个动画的详细解释,可以参考这篇博文:http://mzh3344258.blog.51cto.com/1823534/889898