Android实现自定义圆形进度条的常用方法有哪些
更新时间:2023-10-021. 使用Canvas绘制圆形进度条
使用Android中提供的Canvas类,可以很方便的绘制圆形进度条。Canvas类是对原生的绘图API的封装,可以进行各种形状的绘制。
public class CircleProgressBar extends View { /** * 最大进度 */ private int maxProgress = 100; /** * 当前进度 */ private int currentProgress = 0; private int progressColor; private int backgroundColor; public CircleProgressBar(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleProgressBar); progressColor = a.getColor(R.styleable.CircleProgressBar_progressColor, Color.RED); backgroundColor = a.getColor(R.styleable.CircleProgressBar_backgroundColor, Color.GRAY); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int centerX = getWidth() / 2; int centerY = getHeight() / 2; int radius = getWidth() / 2 - 10; Paint paint = new Paint(); paint.setColor(backgroundColor); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(20); canvas.drawCircle(centerX, centerY, radius, paint); paint.setColor(progressColor); paint.setStrokeWidth(20); float progress = (float) currentProgress / maxProgress; canvas.drawArc(new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius), -90, progress * 360, false, paint); } /** * 设置最大进度 */ public void setMaxProgress(int maxProgress) { this.maxProgress = maxProgress; } /** * 设置当前进度 */ public void setCurrentProgress(int currentProgress) { this.currentProgress = currentProgress; invalidate(); } }
2. 使用ProgressBar实现圆形进度条
Android系统中提供了ProgressBar组件,可以实现各种形式的进度条。通过修改ProgressBar的样式,可以实现圆形进度条。
public class CircleProgressBar extends ProgressBar { public CircleProgressBar(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected synchronized void onDraw(Canvas canvas) { // 圆心坐标 int centerX = getWidth() / 2; int centerY = getHeight() / 2; // 半径 int radius = getWidth() / 2 - 10; // 进度条颜色和背景色 int progressColor = Color.RED; int backgroundColor = Color.GRAY; Paint paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(20); paint.setColor(backgroundColor); // 绘制背景圆 canvas.drawCircle(centerX, centerY, radius, paint); paint.setColor(progressColor); // 计算进度条结束时的角度 float sweepAngle = getProgress() * 1.0f / getMax() * 360; // 绘制进度条 canvas.drawArc(new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius), -90, sweepAngle, false, paint); } }
3. 第三方开源库:CircleProgress
CircleProgress是一款开源的圆形进度条库,可以在Github上找到其源代码。
dependencies { implementation 'com.github.lzyzsd:circleprogress:1.2.1' }
4. 第三方开源库:SmoothProgressBar
SmoothProgressBar是另一款比较流行的开源圆形进度条库,同样可以在Github上找到其源代码。
dependencies { implementation 'com.github.castorflex.smoothprogressbar:library:1.2.0' }
总结
以上就是几种常用的Android实现自定义圆形进度条的方法。使用Canvas绘制圆形进度条是最基础的方法,需要手写代码绘制各种形状。使用ProgressBar可以减少很多工作量,但样式比较单一。第三方开源库可以帮助实现更加美观的圆形进度条,可以根据项目需要选择不同的库。