美文网首页
带边框文字按钮

带边框文字按钮

作者: Taurus_z | 来源:发表于2020-05-13 13:45 被阅读0次

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

相关文章

网友评论

      本文标题:带边框文字按钮

      本文链接:https://www.haomeiwen.com/subject/onjnnhtx.html