天天看点

Android 带边框的自定义TextView

Android 带边框的自定义TextView

图片效果如下:

Android 带边框的自定义TextView

参考代码:

package com.tuniu.hotel.customview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.widget.TextView;

import com.tuniu.app.utils.ExtendUtil;
import com.tuniu.hotel.commonUtils.ExtendUtils;

/**
 * 带边框的TextView
 */
public class BorderTextView extends TextView {

    public static final float DEFAULT_STROKE_WIDTH = 0.5f;    // 默认边框宽度
    public static final float DEFAULT_CORNER_RADIUS = 2.0f;   // 默认圆角半径, 2dp
    public static final float DEFAULT_LR_PADDING = 3f;      // 默认左右内边距
    public static final float DEFAULT_TB_PADDING = 2f;      // 默认上下内边距

    private int strokeWidth;    // 边框线宽
    private int strokeColor;    // 边框颜色
    private int cornerRadius;   // 圆角半径

    private Paint mPaint = new Paint();     // 画边框所使用画笔对象
    private RectF mRectF;                   // 画边框要使用的矩形

    public BorderTextView(Context context) {
        this(context, null);
    }

    public BorderTextView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public BorderTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mRectF = new RectF();
        cornerRadius = ExtendUtils.dip2px(getContext(), DEFAULT_CORNER_RADIUS);
        strokeWidth = ExtendUtil.dip2px(getContext(), DEFAULT_STROKE_WIDTH);
        int paddingLR = ExtendUtils.dip2px(getContext(), DEFAULT_LR_PADDING);
        int paddingTB = ExtendUtils.dip2px(getContext(), DEFAULT_TB_PADDING);
        setPadding(paddingLR, paddingTB, paddingLR, paddingTB);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        mPaint.setStyle(Paint.Style.STROKE);     // 空心效果
        mPaint.setAntiAlias(true);               // 设置画笔为无锯齿
        mPaint.setStrokeWidth(strokeWidth);      // 线宽
        mPaint.setColor(strokeColor);

        // 画空心圆角矩形
        mRectF.left = mRectF.top = 0.5f * strokeWidth;
        mRectF.right = getMeasuredWidth() - strokeWidth;
        mRectF.bottom = getMeasuredHeight() - strokeWidth;
        canvas.drawRoundRect(mRectF, cornerRadius, cornerRadius, mPaint);

    }

    public void setBorderCorlor(int corlor) {
        strokeColor = corlor;
        setTextColor(strokeColor);
    }
}
           

继续阅读