RoundProgressBarWithProgress .java

import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;/** * Created by TONG on 2017/3/25. */public class RoundProgressBarWithProgress extends HorizontalProgressbarWithProgress{    private int mRadius=dp2px(30);    private int mMaxPaintWidth;    public RoundProgressBarWithProgress(Context context) {        this(context,null);    }    public RoundProgressBarWithProgress(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public RoundProgressBarWithProgress(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        mReachHeight= (int) (mUnReachHeight*2.5f);        TypedArray ta=context.obtainStyledAttributes(attrs,R.styleable.RoundProgressBarWithProgress);        mRadius= (int) ta.getDimension(R.styleable.RoundProgressBarWithProgress_radius,mRadius);        ta.recycle();        mPaint.setStyle(Paint.Style.STROKE);        mPaint.setAntiAlias(true);        mPaint.setDither(true);        mPaint.setStrokeCap(Paint.Cap.ROUND);    }    @Override    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        mMaxPaintWidth=Math.max(mReachHeight,mUnReachHeight);        //默认四个padding一致        int expect=mRadius*2+mMaxPaintWidth+getPaddingLeft()+getPaddingRight();        //设置默认warp_content大小        int width=resolveSize(expect,widthMeasureSpec);        int height=resolveSize(expect,heightMeasureSpec);        int readWidth=Math.min(width,height);        mRadius=(readWidth-getPaddingLeft()-getPaddingRight()-mMaxPaintWidth)/2;        setMeasuredDimension(readWidth,readWidth);    }    @Override    protected synchronized void onDraw(Canvas canvas) {        String text=getProgress()+"%";        float textWidth=mPaint.measureText(text);        float textHeight=(mPaint.descent()+mPaint.ascent())/2;        canvas.save();        canvas.translate(getPaddingLeft()+mMaxPaintWidth/2,getPaddingTop()+mMaxPaintWidth/2);        mPaint.setStyle(Paint.Style.STROKE);        //draw unreach bar        mPaint.setColor(mUnReachColor);        mPaint.setStrokeWidth(mUnReachHeight);        //圆心XY 半径        canvas.drawCircle(mRadius,mRadius,mRadius,mPaint);        //draw reach bar        mPaint.setColor(mReachColor);        mPaint.setStrokeWidth(mReachHeight);        float sweepAngle=getProgress()*1.0f/getMax()*360;        //绘制弧        canvas.drawArc(new RectF(0,0,mRadius*2,mRadius*2),0,sweepAngle,false,mPaint);        //draw text        mPaint.setColor(mTextColor);        mPaint.setStyle(Paint.Style.FILL);        canvas.drawText(text,mRadius-textWidth/2,mRadius-textHeight,mPaint);        canvas.restore();    }}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>        

MainActivity.java

package myapplication4.xt.com.myapplication4;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {    private RoundProgressBarWithProgress pb;    private static final  int MSG_UPDATE=0x110;    private Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            if(msg.what==MSG_UPDATE){                int p= pb.getProgress();                pb.setProgress(p);                pb.setProgress(++p);                if(p>=100){                    handler.removeMessages(MSG_UPDATE);                }            }            sendEmptyMessageDelayed(MSG_UPDATE,100);        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        pb = (RoundProgressBarWithProgress) findViewById(R.id.id_progress);        handler.sendEmptyMessage(MSG_UPDATE);    }}
Paste_Image.png

更多相关文章

  1. Android——点击水纹效果
  2. 百度SDK定位
  3. 安装Android(安卓)Studio及自动下载SDK的过程
  4. 视频聊天软件源码Android(安卓)8.1user版本默认开启开发者模式
  5. Android(安卓)在xml中配置 float 和 integer 值
  6. MTK(Android(安卓)N)设置SDCard为默认存储
  7. Android设置虚线、圆角、渐变
  8. 在android工程中导入layoutlib.jar
  9. 查看系统属性build.prop

随机推荐

  1. 【Android每周专题】Android中maxSdkVers
  2. Android开发1――查找所需要出示权限的内
  3. android 横竖屏
  4. Android(安卓)menu
  5. android 使用代码方式创建自定义progress
  6. RelativieLayout布局中的android:gravity
  7. android 3.0中加快启动模拟器
  8. Android系统启动流程浅析
  9. Android(安卓)Animation
  10. 关于android的分辨率