时间:2021-05-19
最近闲来无事,自定义了一个环状进度条,话不多说直接上代码 :
public class CircleProgressView extends View{ private Paint mCirPaint; private Paint mArcPaint; private Paint mTextPaint; private float radius=200; private int textsize=60; private int progress=68; private int stokeWidth=10; private int circleColor=Color.GRAY; private int arcColor=Color.GREEN; private int textColor=Color.BLACK; private int speed=0; public CircleProgressView(Context context) { super(context); } public CircleProgressView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public CircleProgressView(Context context, AttributeSet attrs) { super(context, attrs); } public void setRadius(float radius){ this.radius=radius; invalidate(); } public void setTextSize(int textsize){ this.textsize=textsize; invalidate(); } public void setProgress(int progress){ this.progress=progress; } public void setStokewidth(int stokeWidth){ this.stokeWidth=stokeWidth; invalidate(); } public void setColor(int circleColor,int arcColor,int textColor){ this.circleColor=circleColor; this.arcColor=arcColor; this.textColor=textColor; invalidate(); } public void setSpeed(int speed){ this.speed=speed; } private void init() { mCirPaint=new Paint(); mCirPaint.setColor(circleColor); mCirPaint.setAntiAlias(true); mCirPaint.setStyle(Paint.Style.STROKE); mCirPaint.setStrokeWidth(stokeWidth); mArcPaint=new Paint(); mArcPaint.setColor(arcColor); mArcPaint.setAntiAlias(true); mArcPaint.setStyle(Paint.Style.STROKE); mArcPaint.setStrokeWidth(stokeWidth); mTextPaint=new Paint(); mTextPaint.setColor(textColor); mTextPaint.setTextSize(textsize); mTextPaint.setAntiAlias(true); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); init(); float centerX=getWidth()/2; float centerY=getHeight()/2; canvas.drawCircle(centerX,centerY,radius,mCirPaint); canvas.drawArc(centerX-radius,centerY-radius,centerX+radius,centerY+radius,-90,progress*360/100,false,mArcPaint); canvas.drawText(progress+"%",centerX-(mTextPaint.measureText(progress+"%"))/2,centerY+textsize/2,mTextPaint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (speed!=0){ startProgress(); } } public void startProgress(){ final int preProgress=progress; new CountDownTimer(preProgress * speed, speed) { @Override public void onTick(long l) { setProgress(preProgress-(int) (l/speed)); invalidate(); } @Override public void onFinish() { setProgress(preProgress); invalidate(); this.cancel(); } }.start(); }}相关用法:
setProgress(progress);//设置进度
setRadius(300);//设置半径
setStokewidth(60);//设置环宽
setTextSize(80);//设置文字进度大小
setColor(Color.GRAY,Color.RED,Color.BLUE);//设置颜色(环的颜色,进度条的颜色,文字进度的字体颜色)
setSpeed(20);//设置动画速度,这里的数值是每次进度加一所用时间,所以数值越小动画速度越快
测试代码:
mCircleProgressView= (CircleProgressView) findViewById(R.id.circle_progress); mCircleProgressView.setProgress(progress); mCircleProgressView.setRadius(300); mCircleProgressView.setStokewidth(60); mCircleProgressView.setTextSize(80); mCircleProgressView.setColor(Color.GRAY,Color.RED,Color.BLUE); mCircleProgressView.setSpeed(20);测试效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Android编程实现自定义进度条颜色的方法。分享给大家供大家参考,具体如下:android自定义进度条颜色先看图基于产品经理各种自定义需求,经过
Android实现环形进度条的效果图如下:自定义控件:AttendanceProgressBar代码如下:publicclassAttendanceProgre
本文实例讲述了Android自定义圆形进度条,分享给大家供大家参考。具体如下:大家也可以参考这两篇文章进行学习:《自定义Android圆形进度条(附源码)》《A
上一篇文章总结了下自定义View的几个步骤,如果还有不清楚的同学可以先去看看Android自定义View(一),这篇文章和大家分享一下自定义加载进度条,效果如下
进度条样式在项目中经常可以见到,下面小编给大家分享Android三种方式实现ProgressBar自定义圆形进度条。Android进度条有4种风格可以使用。默认