(1)获取文本的宽度
图片.png方法一:
测量文本所在的矩形区域,再计算矩形区域的宽
Rect rect = new Rect();
mPaint.getTextBounds(text,0,text.length(), rect);
canvas.drawRect(rect, mPaint);
float textWidth1 = rect.width();
Log.d("aaa", "textWidth1:"+textWidth1);
求出矩形的宽度:982.0
,上图中的矩形边框就是文本的矩形区域,其特点是紧贴着文字,没有多余的空间。
方法二:
通过Paint的measureText
方法直接测量文本宽度
float textWidth2 = mPaint.measureText(text);
Log.d("aaa", "textWidth2:"+textWidth2);
canvas.drawLine(0, rect.bottom + 20, textWidth2, rect.bottom + 20, mPaint);
求出矩形的宽度:1012.0
,比前者稍微大一点,因为前者的矩形区域紧贴文字,没有多余的空间。而通过measureText
计算出的宽度会加上开始和结尾的空间,这个空间就是文字和文字之间的空间,为了美观而存在。如上图矩形下面的一条直线就是文字的宽度。
方法三:
计算出每个文字的宽度,最后计算总和
float[] textWidths = new float[text.length()];
mPaint.getTextWidths(text, textWidths);
float textWidth1 = 0;
for(int i=0;i<textWidths.length;i++){
textWidth1 = textWidth1 + textWidths[i];
}
Log.d("aaa", "textWidth1:"+textWidth1);
求出矩形的宽度:1012.0,和方式二
结果一致。
方法四:
通过Layout.getDesiredWidth
来获取
TextPaint textPaint = new TextPaint();
textPaint.setTextSize(280);
textPaint.setColor(Color.BLUE);
textPaint.setStrokeWidth(8);
textPaint.setAntiAlias(true);
textPaint.setStyle(Paint.Style.FILL);
float textWidth1 = Layout.getDesiredWidth(text,textPaint);
Log.d("aaa", "textWidth1:"+textWidth1);
求出矩形的宽度:1012.0,和方式二、方式三
结果一致。
(2)获取文本高度
首先来画一张图:
图片.png对应的代码是:
private void init(){
mPaint = new Paint();
mPaint.setColor(Color.BLUE);
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(8);
mPaint.setTextSize(280);
//mPaint.setTextAlign(Paint.Align.CENTER);
mPaint.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.translate(200, 400);
mPaint.setColor(Color.parseColor("#65A21F"));
canvas.drawLine(-200, 0, canvas.getWidth() - 200, 0, mPaint);
canvas.drawLine(0, -400, 0, canvas.getHeight() - 400, mPaint);
mPaint.setColor(Color.BLACK);
mPaint.setStrokeWidth(2);
mPaint.setStyle(Paint.Style.STROKE);
Rect rect = new Rect();
mPaint.getTextBounds(text,0,text.length(), rect);
canvas.drawRect(rect, mPaint);
float textHeight1 = rect.height();
Log.d("aaa", "textHeight1:"+textHeight1);
float textWidth = mPaint.measureText(text);//获取文本的宽度
Paint.FontMetrics fontMetrics = mPaint.getFontMetrics();
mPaint.setStyle(Paint.Style.FILL);
mPaint.setStrokeWidth(2);
mPaint.setColor(Color.RED);
canvas.drawLine(0, fontMetrics.ascent, mPaint.measureText(text), fontMetrics.ascent, mPaint);
mPaint.setTextSize(50);
canvas.drawText("ascent", textWidth, fontMetrics.ascent, mPaint);
mPaint.setColor(Color.parseColor("#6EAD24"));
canvas.drawLine(0, fontMetrics.bottom, textWidth, fontMetrics.bottom, mPaint);
mPaint.setTextSize(50);
canvas.drawText("bottom", textWidth, fontMetrics.bottom + 30, mPaint);
mPaint.setColor(Color.parseColor("#13AA9C"));
canvas.drawLine(0, fontMetrics.descent, textWidth, fontMetrics.descent, mPaint);
mPaint.setTextSize(50);
canvas.drawText("descent", textWidth, fontMetrics.descent, mPaint);
mPaint.setColor(Color.parseColor("#9C17B3"));
canvas.drawLine(0, 0, textWidth, 0, mPaint);
mPaint.setTextSize(50);
canvas.drawText("baseline", textWidth, fontMetrics.leading, mPaint);
mPaint.setColor(Color.parseColor("#DF3A72"));
canvas.drawLine(0, fontMetrics.top, textWidth, fontMetrics.top, mPaint);
mPaint.setTextSize(50);
canvas.drawText("top", textWidth, fontMetrics.top, mPaint);
mPaint.setTextSize(280);
mPaint.setColor(Color.BLUE);
mPaint.setStrokeWidth(8);
mPaint.setStyle(Paint.Style.FILL);
canvas.drawText(text, 0, 0, mPaint);
}
方法一:
测量文本所在的矩形区域,再计算矩形区域的高
Rect rect = new Rect();
mPaint.getTextBounds(text,0,text.length(), rect);
canvas.drawRect(rect, mPaint);
float textHeight1 = rect.height();
Log.d("aaa", "textHeight1:"+textHeight1);
求出矩形的高度: 277.0
,上图中的矩形边框就是文本的矩形区域,其特点是紧贴着文字,没有多余的空间。
方法二:
通过getFontMetrics()
或getFontMetricsInt()
返回测量数据
主要有5个测量数据:
Top:
baseline到文本顶部的最大的距离
Ascent:
baseline到文本顶部到推荐距离
Descent:
baseline到文本底部到推荐距离
Bottom:
baseline到文本底部到最大距离
Leading:
两行文本之间推荐到额外距离,一般为0。
Paint.FontMetrics fontMetrics = mPaint.getFontMetrics();
float height1 = fontMetrics.descent - fontMetrics.ascent;
Log.d("aaa", "文本的推荐高度:"+height1);
float height2 = fontMetrics.bottom - fontMetrics.top;
Log.d("aaa", "文本的最大高度:"+height2);
文本的推荐高度:
328.125
文本的最大高度:
371.60156
方法三:
通过getFontSpacing
实现
float height3 = mPaint.getFontSpacing();
Log.d("aaa", "文本的高度:"+height3);
求出文本的高度为:328.125,它的计算结果和方法二
求出的推荐高度一致。
网友评论