初尝自定义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界面中使用


好吧,其实我好困,把文章写成了流水账了。。。不过没关系,主要只是记录一下这一次的心得,同时也分享一下,不能总是只看不分享吧哈哈~睡觉睡觉,有空再改改好了~


如果这篇文章又帮到你的话,请点一下‘喜欢’,我会更努力的创作的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,286评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,232评论 4 61
  • 古代君王多自称寡人,意为寡德之人,作为一个谦称,来昭告天下自己是上苍派来的有德之人。 而朱元璋用行动告诉你,寡人并...
    小P的P阅读 747评论 0 9
  • 网易云课堂-IOS 与Android设计规范 引入:红灯停,绿灯行 设计规范是为了培养/适应用户的使用习惯. 1....
    罗尹伊阅读 310评论 0 2
  • 或许是儿时语文老师给我的回忆太过深刻,所以如今的我迷上了看书。 或许是骨子里的文人血脉得到觉醒,所以现在的我沉迷于...
    贰拾一_阅读 658评论 12 20