前言#
最近看框架和源码比较多,很久没有写动画了,相信很多的朋友都对动画感兴趣,我也不例外,毕竟做前端还是要靠动画特效吃饭的,并且比写功能模块更有成就感。
今天我们就来个稍微简单一点的CircleProgressBar热个身。
首先需要对ValueAnimator动画,还有Canvas,Paint画图的相关的类和API都有一定的了解,所以这部分还比较薄弱的朋友可以先去学习一下基础知识,否则可能会有些吃力。
正文#
先看一下效果图,我不会录屏,就百度了一张图片:
这里写图片描述
大概是这样的效果,首先我们不考虑效果,先画出这个圆形的进度条,新建文件CircleProgressBar:
/**
* 进度
*/
private float mProgress = 50;
/**
* 最大进度
*/
private int mMaxProgress = 100;
/**
* 绘制进度条
*/
private void drawProgress(Canvas canvas) {
// 开始画进度条
// 首先画出背景圆
mPaint.setColor(mBackgroundColor);
mPaint.setStyle(Paint.Style.FILL);
// 这里减去了边框的宽度
canvas.drawCircle(mWidth / 2, mHeight / 2, mRadius - mBorderWidth, mPaint);
// 画出进度条
mPaint.setColor(mProgressBorderColor);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mBorderWidth);
// 计算圆弧划过的角度
float angle = CIRCULAR / mMaxProgress * mProgress;
// 这里要画圆弧
canvas.drawArc(mContentRectF, -90, angle, false, mPaint);
// 画出补全部分的进度条
mPaint.setColor(mBorderColor);
mPaint.setStrokeWidth(mBorderWidth);
// 这里要画圆弧
canvas.drawArc(mContentRectF, -90