圆形进度条

提供第二种旋转画布的实现方式

================================

把我用到的图片传上来


==============================

RoundProgressBar

效果图:



/**
 * Created by wzl on 2016/7/6.
 */
public class RoundProgressBar extends View {
    private Paint paint;
    //圆环宽度
    private int offset = 0;
    private int max = 100;
    private int progress = 0;
    //圆点半径
    private int pointRadius = 0;
    //进度条末尾处显示的图片
    private Bitmap bitmap;
    //进度条中间显示的文字
    private String content;

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

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

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

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public RoundProgressBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        offset = AppUtils.dip2px(5);
        paint.setDither(true);
        paint.setStrokeCap(Paint.Cap.ROUND);
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.share_progress_point);
        pointRadius = Math.max(bitmap.getWidth(), bitmap.getHeight()) / 2;
    }

    public void setProgress(int process) {
        if (process >= max) {
            process = max;
        }
        this.progress = process;
        invalidate();
    }

    public void setMax(int max) {
        if (max <= 0) {
            max = 100;
        }
        this.max = max;
        invalidate();
    }

    public void setText(String text) {
        content = text;
        invalidate();
    }

    //padding无效,如用到padding,需自行计算
    @Override
    protected void onDraw(Canvas canvas) {
        //中心点坐标
        int centerX = getWidth() / 2;
        int centerY = getHeight() / 2;
        //中间文字
        if (!TextUtils.isEmpty(content)) {
            paint.setTextSize(AppUtils.dip2px(12));
            paint.setStrokeWidth(AppUtils.dip2px(0.5f));
            paint.setStyle(Paint.Style.FILL);
            float textLength = paint.measureText(content);
            canvas.drawText(content, centerX - textLength / 2, centerY, paint);
        }
        //取最小半径
        int radius = Math.min(centerX, centerY) - offset / 2;
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(getResources().getColor(R.color.default_background));
        paint.setStrokeWidth(offset);
        //画外圈圆
        canvas.drawCircle(centerX, centerY, radius, paint);
        radius -= offset;
        paint.setColor(getResources().getColor(R.color.divider_color));
        //画内圈圆
        canvas.drawCircle(centerX, centerY, radius, paint);
        paint.setColor(getResources().getColor(R.color.title_color));
        RectF rect = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
        int corner = 360 * progress / max;
        canvas.drawArc(rect, -90, corner, false, paint);
        Matrix matrix = new Matrix();
        matrix.postTranslate(centerX - pointRadius, offset * 3 / 2 - pointRadius);
        matrix.postRotate(corner, centerX, centerY);
        canvas.drawBitmap(bitmap, matrix, paint);
    }
//    提供第二种旋转画布的实现方式
//    @Override
//    protected void onDraw(Canvas canvas) {
//        //中心点坐标
//        int centerX = getWidth() / 2;
//        int centerY = getHeight() / 2;
//        中间文字
//        if (!TextUtils.isEmpty(content)) {
//            paint.setTextSize(AppUtils.dip2px(12));
//            paint.setStrokeWidth(AppUtils.dip2px(0.5f));
//            paint.setStyle(Paint.Style.FILL);
//            float textLength = paint.measureText(content);
//            canvas.drawText(content, centerX - textLength / 2, centerY, paint);
//        }
//        //取最小半径
//        int radius = Math.min(centerX, centerY) - offset / 2;
//        paint.setStyle(Paint.Style.STROKE);
//        paint.setColor(getResources().getColor(R.color.default_background));
//        paint.setStrokeWidth(offset);
//        //画外圈圆
//        canvas.drawCircle(centerX, centerY, radius, paint);
//        radius -= offset;
//        paint.setColor(getResources().getColor(R.color.divider_color));
//        //画内圈圆
//        canvas.drawCircle(centerX, centerY, radius, paint);
//        paint.setColor(getResources().getColor(R.color.title_color));
//        RectF rect = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
//        int corner = 360 * progress / max;
//        //旋转画布
//        canvas.rotate(corner, centerX, centerY);
//        canvas.drawArc(rect, -90 - corner, corner, false, paint);
//        Matrix matrix = new Matrix();
//        matrix.postTranslate(centerX - pointRadius, offset * 3 / 2 - pointRadius);
//        canvas.drawBitmap(bitmap, matrix, paint);
//    }
}



                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值