Android drawText的使用以及居中问题
一、BaseLine
在Android中,画文字的位置和画图形的位置是有些不太一样的。
画图形是从图形的left和top的位置开始往右下方向画,这个不再详细说明。
而画文字是从文字的左边和文字的baseline往右上方画,所以如果将文字画在0,0 的位置上,
那么你就只能看到文字底部的一点点了,其实就是baseline下面的一点点内容,这时候y=0其实就是baseline了。
因此在使用drawText(text, x, y, paint)方法的时候,y传入的应该是你通过计算好的值;
drawText(text, x, y, paint)
二、Paint.FontMetrics
FontMetrics里面获取字体绘制的属性,通过修正得到居中显示的baseline:
Rect targetRect = new Rect(50, 50, 1000, 200);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStrokeWidth(3);
paint.setTextSize(80);
String testString = "测试:ijkJQKA:1234";
paint.setColor(Color.CYAN);
canvas.drawRect(targetRect, paint);
paint.setColor(Color.RED);
FontMetricsInt fontMetrics = paint.getFontMetricsInt();
int baseline = (targetRect.bottom + targetRect.top - fontMetrics.bottom - fontMetrics.top) / 2;
// 下面这行是实现水平居中,drawText对应改为传入targetRect.centerX()
paint.setTextAlign(Paint.Align.CENTER);
canvas.drawText(testString, targetRect.centerX(), baseline, paint);