自定义View的圆圈进度条

来源:互联网 发布:虚拟币交易所源码 编辑:程序博客网 时间:2024/05/05 10:43

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);}@Overrideprotected 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);        }    });}

}

原创粉丝点击