安卓扇形进度条


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

import com.neusoft.multimedia.R;

public class SectorProgressView extends View {

    private int progress = 0; // 进度值,范围 0-100
    private Paint progressPaint; // 进度扇形画笔
    private Paint backgroundPaint; // 背景画笔

    public SectorProgressView(Context context) {
        super(context);
        init();
    }

    public SectorProgressView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public SectorProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        progressPaint = new Paint();
        progressPaint.setColor(Color.WHITE);
        progressPaint.setStyle(Paint.Style.FILL);
        progressPaint.setAntiAlias(true);

        backgroundPaint = new Paint();
        backgroundPaint.setColor(Color.WHITE);
        backgroundPaint.setStyle(Paint.Style.STROKE);
        backgroundPaint.setStrokeWidth(getResources().getDimension(R.dimen.px_3));
        backgroundPaint.setAntiAlias(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int centerX = getWidth() / 2;
        int centerY = getHeight() / 2;
        int radius = Math.min(getWidth(), getHeight()) / 2 - getResources().getDimensionPixelSize(R.dimen.px_3);
        // 绘制背景圆
        canvas.drawCircle(centerX, centerY, radius, backgroundPaint);
        // 计算扇形的角度
        float sweepAngle = (float) progress / 100 * 360;
        // 绘制进度扇形
        canvas.drawArc(
                centerX - radius,
                centerY - radius,
                centerX + radius,
                centerY + radius,
                -90,
                sweepAngle,
                true,
                progressPaint
        );
    }

    // 设置进度的方法
    public void setProgress(int progress) {
        if (progress < 0) {
            progress = 0;
        } else if (progress > 100) {
            progress = 100;
        }
        if (progress == this.progress) {
            return;
        }
        this.progress = progress;
        invalidate();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容