绘制文字如何让文字居中

Rect bounds = new Rect();
paint.getTextBounds(mText, 0, mText.length(), bounds);
FontMetricsInt fontMetrics = paint.getFontMetricsInt();
int baseline = (mRectHeight - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top;
canvas.drawText(mText,(mRectWidth-bounds.width()) / 2, baseline, paint);
paint.getTextBounds(mText, 0, mText.length(), bounds);

这个方法会将mText String范围赋值我们传进去的Rect
getFontMetricsInt()方法我们先看个图

绘制文字如何让文字居中_第1张图片
20141124164714390.gif
绘制文字如何让文字居中_第2张图片
20141124164740174.png

获取到的Metrics里面

        public int   top;
        public int   ascent;
        public int   descent;
        public int   bottom;
        public int   leading;

封装这些属性,根据上面的图片简单解释下
top =baseline上面的高度也就是 leading+leading
bottom=baseline下面的高度也就是 leading+leading
leading就是为一些上下标识有符号的字符预留的空间.

所以我们居中显示时就是整个控件的高度-bottom-top 由于baseline上面的top值是负值,所以我们加上它等同于减去它,然后 结果/2 -top (等于+top)
这样高度就居中了,宽度居中一样的我们用控件的宽度-stringwidth宽度然后/2 这样就宽度居中了

你可能感兴趣的:(绘制文字如何让文字居中)