带边框文字按钮


public class TextCircleView extends AppCompatTextView {
    private Paint mPaint;

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

    //xml创建TextCircleView调用这个构造函数
    public TextCircleView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    //new TextCircleView调用这个构造函数
    public TextCircleView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    /**
     * 初始化画笔
     */
    public void init() {
        mPaint = new Paint();
    }

    /**
     * 调用onDraw绘制边框
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //创建一个RectF,用来限定绘制圆弧的范围
        RectF rectf = new RectF();
        //设置画笔的颜色
        mPaint.setColor(getPaint().getColor());
        //设置画笔的样式,空心
        mPaint.setStyle(Paint.Style.STROKE);
        //设置抗锯齿
        mPaint.setAntiAlias(true);
        //设置画得一个半径,然后比较长和宽,以最大的值来确定长方形的长宽,确定半径
        int r = Math.max(getMeasuredWidth(), getMeasuredHeight());
        //如果设置的padding不一样绘制出来的是椭圆形。绘制的时候考虑padding
        //Log.i("边界", "宽度"+getMeasuredWidth()+"高度"+getMeasuredHeight()+"getPaddingLeft()"+getPaddingLeft()+"getPaddingTop"+getPaddingTop()+"getPaddingRight(): "+getPaddingRight()+"getPaddingBottom()"+getPaddingBottom());
        //当padding都为0的时候,绘制出来的就是RectF限定的区域就是一个正方形
        rectf.set(getPaddingLeft(), getPaddingTop(), r - getPaddingRight(), r - getPaddingBottom());
        //绘制圆弧
        canvas.drawArc(rectf, 0, 360, false, mPaint);
    }
}

你可能感兴趣的:(带边框文字按钮)