美文网首页
Android中canvas.drawText 绘制文本居中

Android中canvas.drawText 绘制文本居中

作者: heyrenly | 来源:发表于2019-02-23 19:58 被阅读0次

    Android中canvas.drawText 绘制文本居中

    因为最近多开项目,时间主要花在 coding 和 review 上了,抽空写个自定义控件中的小案例,但是虽然知识点很小但是在开发中很常用


    首先来看这个方法:

    drawText(String text, float x, float y, Paint paint)
    

    首先第一个参数 text 是我们需要绘制的文本,第二、三个参数 x,y 是关键所在,其含义为:x默认是这个字符串的左边在屏幕的位置,y是指定这个字符baseline在屏幕上的位置。最后第四个参数 paint 是我们的画笔,用于定义字体、大小、颜色等属性。
    这图用iPad随手画的,可以很清楚地看出x和y参数的意义。

    在这里插入图片描述
    那么怎么做才能获取正确的居中位置呢,这里需要一些运算,直接上代码:
    @Override
        protected void onDraw(Canvas canvas) {
            String testString = "测试文字";
            //设置要绘制的字体
            Paint mPaint = new Paint();
            mPaint.setTypeface(Typeface.create(Typeface.DEFAULT_BOLD, Typeface.BOLD));
            mPaint.setTextSize(30);
            mPaint.setColor(ThemeUtil.getThemeColor(context, R.attr.colorAccent));
            //将文字用一个矩形包裹,进而算出文字的长和宽
            Rect bounds = new Rect();
            mPaint.getTextBounds(testString, 0, testString.length(), bounds);
            FontMetricsInt fontMetrics = mPaint.getFontMetricsInt();
            //计算长宽
            int x = getMeasuredWidth() / 2 - bounds.width() / 2;
            int y = (getMeasuredHeight() - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top;
            canvas.drawText(testString, x, y, mPaint);
        }
    

    在刚开始写的时候,可能很多人会和我一样写成

    canvas.drawText(testString, getMeasuredWidth()/2 - bounds.width()/2, getMeasuredHeight()/2 + bounds.height()/2,mPaint);
    

    不是真正的居中,虽然 y 确实是位于中间,但是会导致文字下沉,其原因还是因为我上面讲的 y 不是字符中心,而是baseline在屏幕上的位置

    相关文章

      网友评论

          本文标题:Android中canvas.drawText 绘制文本居中

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