自定义View的圆圈进度条

Java类中
public class MyProgress extends View {
Paint paint;
int mProgress=0;
int mProgressNum=0;
public MyProgress(Context context) {
super(context);
init();
}

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

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

private void init() {
    paint=new Paint();
    paint.setAntiAlias(true);
}

@Override
protected void onDraw(Canvas canvas) {
    paint.setStrokeWidth(0);//防止Arc变粗
    paint.setColor(Color.BLACK);
    paint.setStyle(Paint.Style.STROKE);
    canvas.drawCircle(200,200,100,paint);
    canvas.drawCircle(200,200,80,paint);
    canvas.drawText(mProgressNum+"%",200,200,paint);//在圆中心显示的百分比

    RectF rectF=new RectF(110,110,290,290);
    paint.setStrokeWidth(20);
    canvas.drawArc(rectF,0,mProgress,false,paint);

}
public void setProgress(int progress){
    mProgress=progress;
    mProgressNum=progress*100/360;
    invalidate();
}

}

MainActivity中
public class MainActivity extends AppCompatActivity {
MyProgress mp;
Button bt_start,bt_reset;
AsyncTask async;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mp= (MyProgress) findViewById(R.id.mp);
bt_start= (Button) findViewById(R.id.bt_start);
bt_reset= (Button) findViewById(R.id.bt_reset);

    bt_start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           async=new AsyncTask<String,Integer,String>(){
                @Override
                protected String doInBackground(String... strings) {
                    for (int i=1;i<=360;i++){
                        if(isCancelled()){
                           break;
                        }
                        SystemClock.sleep(83);
                        publishProgress(i);
                    }

                    return null;
                }

                @Override
                protected void onProgressUpdate(Integer... values) {
                    if (isCancelled()){
                        return;
                    }
                    mp.setProgress(values[0]);
                }
            }.execute();
        }
    });
    //点击重置可以重新开始
    bt_reset.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(async!=null&&async.getStatus()==AsyncTask.Status.RUNNING){
                async.cancel(true);
            }
            mp.setProgress(0);
        }
    });

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值