网络加载环形进度条
时间: 2023-07-03 22:06:19 浏览: 47
在实现网络加载环形进度条的过程中,可以使用第三方库或者自定义View来实现。这里给出一个自定义View的示例代码:
```java
public class CircularProgressView extends View {
private int mProgress = 0;
private int mStrokeWidth = 8;
private int mColor = Color.BLUE;
private RectF mRectF;
private Paint mPaint;
public CircularProgressView(Context context) {
this(context, null);
}
public CircularProgressView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CircularProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mStrokeWidth);
mPaint.setColor(mColor);
mRectF = new RectF();
}
public void setProgress(int progress) {
mProgress = progress;
invalidate();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
int size = Math.min(width, height);
setMeasuredDimension(size, size);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
mRectF.set(mStrokeWidth / 2, mStrokeWidth / 2, width - mStrokeWidth / 2, height - mStrokeWidth / 2);
canvas.drawArc(mRectF, -90, 360 * mProgress / 100, false, mPaint);
}
}
```
在上述代码中,我们定义了一个名为CircularProgressView的自定义View,在View的构造函数中初始化画笔等参数,并在onDraw方法中绘制圆弧。
在外部使用该View时,可以通过调用setProgress方法来更新进度值。示例代码如下:
```java
CircularProgressView progressView = findViewById(R.id.progress_view);
progressView.setProgress(50);
```
上述代码可以在XML布局文件中添加一个CircularProgressView,并在Activity中获取该View的实例,然后调用setProgress方法更新进度值。
需要注意的是,在绘制圆弧时,我们使用了Canvas的drawArc方法,其中参数startAngle为圆弧起始角度,sweepAngle为圆弧扫过的角度,useCenter表示是否连接圆心,最后一个参数为画笔。我们将startAngle设置为-90度,这是为了让圆弧的起始点位于正上方,sweepAngle则根据当前进度值进行计算。