圆形百分比进度条(避坑笔记)

最近在写项目的时候发现要写一个圆形进度条,本来想着自己写一个吧,写完后发现有坑啊,关键是还是一个大坑,项目中使用的刷新控件是WaterDropListView然后发现进度条显示的数据一直有问题,一开始以为是自己数据的问题,经过一系列的断点调试才发现问题是出在了进度条的绘制上。
迫不得已只好寻找第三方来填坑,最终发现了一个名为CirclePercentView的圆形进度条,哈哈,这下可以解决我的问题了吧,这下开心了,等等,这是什么鬼
圆形百分比进度条(避坑笔记)
文章图片
这里写图片描述
进度的确出来了,可为什么显示的值不对呢?原数据是 0、10、12、4、,怎么现在全部少了1,找呀找呀发现了 CirclePercentView类中的实现方法中有这么一段

//内部设置百分比 用于动画效果 private void setCurPercent(int percent) { mPercent = percent; new Thread(new Runnable() { @Override public void run() { int sleepTime = 20; for (int i = 0; i < mPercent; i++) { if (i % 20 == 0) { sleepTime += 2; } try { Thread.sleep(sleepTime); } catch (InterruptedException e) { e.printStackTrace(); } mCurPercent = i; CirclePercentView.this.postInvalidate(); } }}).start(); }

for (int i = 0; i < mPercent; i++)
mCurPercent = i;
你发现了吗?就是因为在循环的时候判断条件是小于当前的mPercent,所以会造成一直比原来的值小1,更改的方法就是就是让其小于等于即可。for (int i = 0; i <= mPercent; i++)
现在就可以了,还有个小问题,咦,怎么圆形中的文字没有居中呢?老规矩,上代码:
//绘制文本 Paint textPaint = new Paint(); String text = mCurPercent + "%"; textPaint.setTextSize(mCenterTextSize); float textLength = textPaint.measureText(text); textPaint.setColor(Color.WHITE); canvas.drawText(text, x - textLength/2, y, textPaint);

具体的设置就是drawText了,这样其实并没有很好的做居中的适配判断,本人稍微改了下。如觉得还未居中的算法可以自己调整
Paint textPaint = new Paint(); String text = mCurPercent + "%"; textPaint.setTextSize(mCenterTextSize); textPaint.setColor(mSmallColor); float textWidth = textPaint.measureText(text); float textHeight = (textPaint.descent() + textPaint.ascent()) / 2; canvas.drawText(text, mRadius - textWidth / 2, mRadius - textHeight, textPaint);

现在看上去还算可以的了,当然如果你想更准确的话就需要更精密的计算了。
ok,到这里效果也完成的差不多了,这个就是我在用第三方控件的时候遇到的一些问题。具体使用:

【圆形百分比进度条(避坑笔记)】好了,其他的没有了,最后安利下另一个进度条的控件:
CircleProgressBar
传送门:
https://github.com/dinuscxj/CircleProgressBar
效果看起来不错,具体的自己实践吧!!!

    推荐阅读