自定義圓形seekBar,超簡單


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

/**
 * 自定義圓形seekBar,只支持固定寬度
 */
public class CircularSeekBar extends View {

    private int mViewWidth;//控件的寬
    private int mCurrentProgress = 40;//當前進度
    private int mMaxProgress = 100;//總進度
    private int mSeekBarCircularWidth = 6;//圓環的寬度
    private int mR;//半徑
    private String mBgDefault = "#BDBDBD";//默認背景色
    private String mBgSeekBar = "#1db36f";//進度背景色
    private Paint mPaintDefault;
    private Paint mPaintSeekBar;
    private RectF rectFProgress;

    public CircularSeekBar(Context context) {
        super(context);
        init();
    }

    private void init() {
        mPaintDefault = new Paint();
        mPaintDefault.setStrokeWidth(mSeekBarCircularWidth);
        mPaintDefault.setAntiAlias(true);
        mPaintDefault.setColor(Color.parseColor(mBgDefault));
        mPaintDefault.setStyle(Paint.Style.STROKE);

        mPaintSeekBar = new Paint();
        mPaintSeekBar.setStrokeWidth(mSeekBarCircularWidth);
        mPaintSeekBar.setAntiAlias(true);
        mPaintSeekBar.setColor(Color.parseColor(mBgSeekBar));
        mPaintSeekBar.setStyle(Paint.Style.STROKE);

        rectFProgress = new RectF();//只初始化一次
    }

    public CircularSeekBar(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CircularSeekBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        int cx = mViewWidth / 2;
        canvas.drawCircle(cx, cx, mR, mPaintDefault);
        int sweepAngle = mCurrentProgress * 360 / mMaxProgress;
        int left = mSeekBarCircularWidth / 2;
        int right = mViewWidth - left;
        rectFProgress.set(left, left, right, right);//減掉畫筆的寬度
        canvas.drawArc(rectFProgress, -90, sweepAngle, false, mPaintSeekBar);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        mViewWidth = MeasureSpec.getSize(widthMeasureSpec);
        mR = (mViewWidth - mSeekBarCircularWidth) / 2;
        setMeasuredDimension(mViewWidth, mViewWidth);
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章