美文网首页
自定义圆角Span

自定义圆角Span

作者: 小相柳 | 来源:发表于2021-06-26 15:56 被阅读0次
public class RoundedBackgroundSpan extends ReplacementSpan {

    private int mBackgroundColor;
    private int mTextColor;
    private int mRadius;
    private int mTextSize;
    private int mPadding;
    private int mTopBottomReduce;
    private float mStrokeWidth;
    private int mWidth;
    private int mMargin;

    public RoundedBackgroundSpan(int mBackgroundColor, int mRadius,
                                 int mTextColor, int mTextSize, int mPadding,
                                 int mTopBottomReduce, float mStrokeWidth, int mMargin) {
        this.mBackgroundColor = mBackgroundColor;
        this.mTextColor = mTextColor;
        this.mRadius = mRadius;
        this.mTextSize = mTextSize;
        this.mPadding = mPadding;
        this.mTopBottomReduce = mTopBottomReduce;
        this.mStrokeWidth = mStrokeWidth;
        this.mMargin = mMargin;
    }

    @Override
    public int getSize(@NonNull Paint paint, CharSequence text, int start, int end,
                       @Nullable Paint.FontMetricsInt fm) {
        float originTextSize = paint.getTextSize();
        float originStokeWidth = paint.getStrokeWidth();
        Paint.Style style = paint.getStyle();

        paint.setTextSize(mTextSize);
        if (mStrokeWidth > 0) {
            paint.setStyle(Paint.Style.FILL_AND_STROKE);
            paint.setStrokeWidth(mStrokeWidth);
        }
        mWidth = (int) (paint.measureText(text, start, end) + 2 * mPadding + 2 * mMargin);

        paint.setTextSize(originTextSize);
        paint.setStrokeWidth(originStokeWidth);
        paint.setStyle(style);

        return mWidth;
    }

    @Override
    public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x,
                     int top, int y, int bottom, @NonNull Paint paint) {
        canvas.save();
        paint.setColor(mBackgroundColor);
        paint.setAntiAlias(true);

        RectF rectF = new RectF(x + mMargin, y + paint.ascent() + mTopBottomReduce,
                x + mWidth - mMargin, y + paint.descent() - mTopBottomReduce);
        canvas.drawRoundRect(rectF, mRadius, mRadius, paint);

        paint.setColor(mTextColor);
        paint.setTextAlign(Paint.Align.CENTER);
        paint.setTextSize(mTextSize);
        if (mStrokeWidth > 0) {
            paint.setStyle(Paint.Style.FILL_AND_STROKE);
            paint.setStrokeWidth(mStrokeWidth);
        }

        Paint.FontMetrics metrics = paint.getFontMetrics();
        float fontTop = metrics.top;
        float fontBottom = metrics.bottom;

        int baselineY = (int) (rectF.centerY() - (fontTop + fontBottom) / 2);
        canvas.drawText(text, start, end, rectF.centerX(), baselineY, paint);
        canvas.restore();
    }
}

相关文章

网友评论

      本文标题:自定义圆角Span

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