android 自定义加载动画效果,Android自定义带加载动画效果的环状进度条

最近闲来无事,自定义了一个环状进度条,话不多说直接上代码 :

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);//设置进度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值