[Android][自定义进度条]④--圆形进度条的onMeasure

参考地址

http://sumile.cn/archives/1523.html

attrs.xml




    
    
    
    
    
    
    

    
        
        
        
        
        
        
        
    

    
        

    

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);

    }
}

你可能感兴趣的:([Android][自定义进度条]④--圆形进度条的onMeasure)