热文导读 | 点击标题阅读
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