专栏名称: 开发者全社区
分享和推送Java/Android方向的技术和文章,让你成为这方面的大牛,让你每天都成长一点。同时,我们也会邀请BAT的大牛分享原创!
目录
相关文章推荐
鸿洋  ·  PackageManagerService和 ... ·  昨天  
鸿洋  ·  2024 了, Insets 你不会还不懂吧? ·  3 天前  
鸿洋  ·  鸿蒙版 React Native ... ·  4 天前  
51好读  ›  专栏  ›  开发者全社区

自定义圆环百分占比view (label文字支持自动换行 和设置显示行数)

开发者全社区  · 公众号  · android  · 2017-06-23 08:11

正文

热文导读 | 点击标题阅读

Android史上第一震撼榜单—2017年Android百大框架排行榜,附完整项目

吊炸天!74款APP完整源码!

【建议收藏】andriod 资源大全

来源:http://www.jianshu.com/p/08fac18fe447

按照国际惯例,先上效果图







数据结构

从图可以看出我们需要标志类型的label 数量value 所占的角度angle 还有代表的颜色,得出数据结构如下

需求分析

按照数据总数平分一个圆,但是可能存在不能整分的情况,还有可能分的角度太小都看不到。

  • 最小角度为2,小于2度的设置成2度,方便查看

  • 按照Entry 的value 值分配角度e.angle = (360.0f * e.value) / count + arrearage;(count总个数,arrearage为上一个亏欠的度数)

  • 上面亏欠的度数arrearage = e.angle - 2f (<0) ,由下一个项目补偿

  • 如果全部计算完毕之后arrearage < 0 ,既还有欠费,那么再循环一遍,重新分配一次

  • 为了简化程序,arrearage 亏欠补偿是由下一个补偿的,没有考虑平均分摊,而且只有补偿之后e.angle + arrearage > 2 角度仍然大于2度的才有资格替上面一个补偿亏欠

代码

注释已经写的很清楚了,这里就不再解释,具体的坐标计算了,里面包括了一些数学的东西,椭圆的知识忘了可以百度一下,还有解决了TextPaint 绘制文字重叠不自动换行的问题,具体参考 Canvas的drawText绘制文本自动换行(支持设置显示最大行数)。

由于篇幅有限,具体源代码和使用请点击:自定义圆环百分占比view ,或者,点击“阅读原文”前往

看完本文有收获?请分享给更多人

更多学习资料点击下面的“阅读原文”获取


Java和Android架构

欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们。搜索微信公众号:JANiubility。

公众号:JANiubility