参考地址
http://sumile.cn/archives/1523.html
attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="progress_unreach_color" format="color"/>
<attr name="progress_unreach_height" format="dimension"/>
<attr name="progress_reach_color" format="color"/>
<attr name="progress_reach_height" format="dimension"/>
<attr name="progress_text_color" format="color"/>
<attr name="progress_text_size" format="dimension"/>
<attr name="progress_text_offset" format="dimension"/>
<declare-styleable name="HorizontalProgressbarWithProgress">
<attr name="progress_unreach_color" />
<attr name="progress_unreach_height"/>
<attr name="progress_reach_color" />
<attr name="progress_reach_height" />
<attr name="progress_text_color" />
<attr name="progress_text_size" />
<attr name="progress_text_offset" />
</declare-styleable>
<declare-styleable name="RoundProgressBarWithProgress">
<attr name="radius" format="dimension"/>
</declare-styleable>
</resources>
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Paint;
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);
}
}