圆形加载进度条

来源:互联网 发布:盖世豪侠 知乎 编辑:程序博客网 时间:2024/05/16 17:02
package com.example.admin.yuanhuan;import android.app.Notification;import android.content.Context;import android.content.Intent;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.os.Handler;import android.os.Message;import android.provider.MediaStore;import android.util.AttributeSet;import android.view.View;import android.widget.Toast;/** * Created by admin on 2017/12/2. */public class yuanhuan extends View implements Runnable{    int outwidth=10;    int tx=0;    int ty=0;    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);        }    };    private Paint paint;    private RectF rectF;    private Paint paint2;    private int progress=0;    int pro=100;    private Paint paint3;    public yuanhuan(Context context) {        this(context,null);    }    public yuanhuan(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public yuanhuan(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        huabi();    }    private void huabi() {        paint = new Paint();        paint.setColor(Color.BLACK);        paint2 = new Paint();        paint2.setColor(Color.YELLOW);        //是否填充        paint2.setStyle(Paint.Style.STROKE);        //设置外圆的宽度        paint2.setStrokeWidth(outwidth);        paint2.setAntiAlias(true);        paint3 = new Paint();        paint3.setColor(Color.RED);    }    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        tx=w/2;        ty=h/2;        //圆环的半径        int i = 100+outwidth/2;        rectF = new RectF();         rectF.left=w/2-i;        rectF.right=w/2+i;        rectF.top=h/2-i;        rectF.bottom=h/2+i;    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //内圆        canvas.drawCircle(getWidth()/2,getHeight()/2,100,paint);        //外援        canvas.drawArc(rectF,-90,(progress*360)/pro,false,paint2);        dreawText(canvas);    }    private void dreawText(Canvas canvas) {        String des = progress + "%";        //得到文字的宽度与高度        Paint.FontMetrics fm = new Paint.FontMetrics();        //得到文字的高度        int textHeight = (int)Math.ceil(fm.descent - fm.ascent);        //的到文字宽度        int textWidth = (int)paint3.measureText(des,0,des.length());        canvas.drawText(des,getWidth()/2 - (textWidth / 2),getHeight() / 2 - (textHeight/2),paint3);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }    @Override    public void run() {        while (true){            if(progress<100){                progress++;                try {                    Thread.sleep(100);                    if(progress==50){                        handler.sendEmptyMessage(0);                    }                } catch (InterruptedException e) {                    e.printStackTrace();                }                postInvalidate();            }else{                progress=0;            }        }    }}