自定义环形进度条

自定义圆形进度条


public class ProgressCircle extends View {
	private Context mContext;
	private Paint mPaint;
	private DecimalFormat df = new DecimalFormat("0.00");//格式化小数
	
	private final int lineLen = 20; //线长
	private int radius = 0; //圆半径
	private final int padding = 15;//圆与横线的间距
	private int lineStartY = 30; //线的起点Y
	private int lineStopY = lineStartY + lineLen;//线的终点Y
	
	private final int maxProgress = 120; //总进度值
	private int progress = 0; //进度值
	private final int rotate = 360 / maxProgress; //绘制线的旋转角度
	private int progressColor = Color.RED; //已完成的进度颜色值
	private String percent = "0%";
	
    public ProgressCircle(Context context) {
        this(context,null);
        init(context);
    }

    public ProgressCircle(Context context, AttributeSet attrs) {
        this(context, attrs,0);
        init(context);
    }

    public ProgressCircle(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }
    
    private void init(Context context){
    	 this.mContext = context;
    	 mPaint = new Paint();
         mPaint.setAntiAlias(true);
    }
    
    
    public int getProgress() {
		return progress;
	}
    
    
	public int getMaxProgress() {
		return maxProgress;
	}

	public String getPercent() {
		return percent;
	}

	//设置进度值
	public void setProgress(int progress) {
		if(progress < 0){
			this.progress = 0;
		}else if(progress >= maxProgress){
			this.progress = maxProgress;
		}else{
			this.progress = progress;
		}
		percent =  df.format(this.progress * 100.0 / maxProgress) + "%";
		invalidate();
	}

	@Override
    protected void onDraw(Canvas canvas) {
        int centerX = getMeasuredWidth()/2;
        int centerY = getMeasuredHeight()/2;
        radius = centerX > centerY ? (centerY - (lineLen + padding) * 2) : (centerX - (lineLen + padding) * 2);
       
        canvas.save();
        mPaint.setStrokeWidth(5);
        mPaint.setColor(Color.parseColor("#D5D5D5"));

        for(int i = 0; i< maxProgress; i++){
        	if(i < progress){
        		mPaint.setColor(progressColor);
        	}else{
        		mPaint.setColor(Color.parseColor("#D5D5D5"));       		
        	}
            canvas.drawLine(centerX, lineStartY, centerX, lineStopY, mPaint);
            canvas.rotate(rotate, centerX, centerY);
        }
        canvas.restore();

        mPaint.setColor(Color.parseColor("#247ACB"));
        canvas.drawCircle(centerX, centerY, radius, mPaint);
        
        String str = "进度百分比";
        mPaint.setTextSize(30);
        float txtLength = mPaint.measureText(str);
        mPaint.setColor(Color.WHITE);
        canvas.drawText(str, centerX- txtLength/2, centerY-50,mPaint);
 
        mPaint.setTextSize(50);
        float perLength = mPaint.measureText(percent);
        canvas.drawText(percent,centerX- perLength/2,centerY+50,mPaint);
    }
}

 

下载地址



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值