android 自定义View简单的ProgressView圆形进度条

来源:互联网 发布:天下3鬼墨女捏脸数据 编辑:程序博客网 时间:2024/05/16 08:58

MainActivity


public class MainActivity extends AppCompatActivity {    private Button btnAdd;    private ProgressView pv;    private static final int FLAG = 0x123;    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case FLAG:                    int progress = pv.getProgress();                    progress += 10;                    if (progress > 100) {                        progress = 0;                    }                    pv.setProgress(progress);                    handler.sendEmptyMessageDelayed(FLAG, 1000);                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btnAdd = (Button) findViewById(R.id.btn_add);        pv = (ProgressView) findViewById(R.id.pv_data);        btnAdd.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {//                int progress = pv.getProgress();//                progress += 30;//                pv.setProgress(progress);                handler.sendEmptyMessageDelayed(FLAG, 1000);            }        });        pv.setListener(new ProgressView.ProgressUpdateListener(){            @Override            public void onProgressUpdated(int progress) {                if (progress >= 100) {//                    handler.remove;                    startActivity(new Intent(MainActivity.this, ScanActivity.class));                }            }        });    }    @Override    protected void onStop() {        super.onStop();        handler.removeMessages(FLAG);    }}
ProgressView
public class ProgressView extends View {    private ProgressUpdateListener listener;    interface  ProgressUpdateListener {        void onProgressUpdated(int progress);    }    public void setListener(ProgressUpdateListener listener) {        this.listener = listener;    }    private int progress = 0;    public ProgressView(Context context) {        super(context);    }    public ProgressView(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);    }    public ProgressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    public int getProgress() {        return progress;    }    public void setProgress(int progress) {        this.progress = progress;        postInvalidate();        if (listener != null) {            listener.onProgressUpdated(progress);        }    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        int width = getWidth();        int height = getHeight();        // 绘图范围        int react = Math.min(width, height);        // 半径        int radius = react / 2;        // 绘制最外层的大圆        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);        paint.setColor(Color.GREEN);        paint.setStyle(Paint.Style.STROKE);        canvas.drawCircle(radius, radius, radius, paint);        paint.reset();        paint.setStyle(Paint.Style.STROKE);        paint.setStrokeWidth(20);        paint.setColor(Color.RED);        // 画扇形        canvas.drawArc(10, 10, react-10, react-10, -90, progress*360/100, true, paint);        // 画内层的小圆        paint.reset();        paint.setColor(Color.WHITE);        paint.setStyle(Paint.Style.FILL_AND_STROKE);        canvas.drawCircle(radius, radius, radius - 20, paint);        // 画进度文字        paint.reset();        paint.setColor(Color.BLUE);        paint.setTextSize(40);        Rect rect = new Rect();        paint.getTextBounds(progress + "", 0, String.valueOf(progress).length(),                rect);        int textWidth = rect.width();        int textHeight = rect.height();        canvas.drawText(progress + "", radius-textWidth/2, radius-textHeight/2, paint);    }}



原创粉丝点击