初尝自定义View和属性动画:实现一个转动的进度条
最近看到了郭霖大神写的博客,关于属性动画的使用的。Android属性动画完全解析(上),初识属性动画的基本用法
觉得讲的真的是很有意思,通俗易懂。一口气看完上中下三篇,腰不疼气不喘呀哈哈。。。
刚好公司的UI设计师来跟我说现在新的设计中会有一个评价好评率,到时旁边要有一个圆环来代表进度,最好还要有动画效果,就那种一开始就转动,从0转到当前进度的效果。UI大概长这个样子:
其实这个的效果就很像是京东小白信用的那个动画效果了。
刚好看完郭霖大神对于属性动画的讲解,感觉这个应该难度不是很大。于是说干就干。
首先是要先分析一下View的构成
也就是说其实这个View可以分为三层:
1、最底下一层,是一个不会变的圆
2、一个深色的,代表进度的扇形
3、中间的的小圆
其中1和3是不会变的,所谓的进度其实就是2中扇形的圆心角的度数了
所以我们要分层的把View画出来
先创建一个自定义的View
在自定义的View中先定义好即将要用到的变量,同时重写一下最重要的 onDraw();
然后是先定义好xml中即将要用到的自定义View的属性
定义在项目的attrs.xml文件中
然后重写自定义View构造函数
把xml中的属性读取进来,同时初始化一下即将要用的画笔
PS:使用完 TypeArray 之后记得调用一下 TypeArray.recycle()释放资源
好了,准备工作做的差不多了,我们来先画第一个圆
在onDraw()中调用一下,看下效果
效果
第一个圆已经成功的画出来了
现在画代表进度的扇形
效果
为了能看到效果,先让扇形的角度等于270,实际上扇形的角度是要给属性动画控制的,根据动画的时长来控制
再画一个中间的小圆
调用一下
效果
呐,现在是不是已经长得有点像射鸡狮要求的了啦,可能你会说颜色不对啊,可别忘记了我们早就预留了自定义属性呢
修改成射鸡狮制定的颜色及圆环的宽度之后,是不是基本就是这个圆了。
但目前为止,自定义View是画完了,接下来就是添加动画了
动画是使用新的属性动画,以前的补间动画和帧动画已经不能满足我们的需要了
如果对于属性动画不了解的可以看看Android属性动画完全解析(上),初识属性动画的基本用法,然后顺便把它接下去的中、下篇也看一下,就能理解了。
最后,实现动画效果
动画的实现很简单,只是对目标角度进行一个平滑的过渡,然后在过渡的过程中不断的重画扇形
调用动画
效果
动画是不是已经很顺畅的跑起来了
可以开始整理代码了
首先我们肯定不满足参数只能在xml指定,特别是代表进度的扇形的角度,这个必须是拿到真实数据之后才能计算得到的。所以,有必要把一些接口给暴露出来
考虑到View的可定制性,我暴露以下这些
这样就可以供我们在得到实际数据之后对View进行定制了
最终,在我编写的UI界面中使用