「译」Android文本测量
来源:互联网 发布:win7关闭端口批处理 编辑:程序博客网 时间:2024/05/29 23:48
Chris Banes 原文
如果你开始在Android的Canvas上人工绘制事物,你极有可能同时也会面临文本的绘制。
当你这样做的时候,需要知晓放置文本的具体位置,而要做到这一点,你需要测量出文本的开始位置的x/y轴坐标。
最近在一款app中我需要在Canvas上绘制同时满足水平与竖直居中的文本,所以我从以下代码开始着手:
Paint mTextPaint = new Paint();mTextPaint.setTextAlign(Paint.Align.CENTER); // 文本居中// 之后你进行绘制...canvas.drawText(mText, // 用于显示的文本 mBounds.centerX(), // canvas bounds 的 X 中间坐标 mBounds.centerY(), // canvas bounds 的 Y 中间坐标 mTextPaint);
我并不指望第一次就成功并且确如所料,其输出效果如下:
测量文本
接着我试着给文本定位,计算文本宽、高并且正确修改绘制的X值与Y值:
int mTextWidth, mTextHeight; // 我们计算出来的文本界限Paint mTextPaint = new Paint();// 现在让我们计算文本尺寸Rect textBounds = new Rect();mTextPaint.getTextBounds(mText, 0, mText.length(), textBounds);mTextWidth = textBounds.width();mTextHeight = textBounds.height();// 之后你进行绘制...canvas.drawText(mText, // 用于显示的文本 mBounds.centerX() - (mTextWidth / 2f), mBounds.centerY() + (mTextHeight / 2f), mTextPaint);
这一次我们朝目标接近了许多,但正如你所看到的那样,它并不是十分正确的置中。
为了确定我没有看到的事物,我添加了额外的绘制调用让文本背后多出了一个矩形,该矩形的界限由Paint.getTextBounds()
精确计算得出。
如你所见,文本的绘制明显超出了它自身计算得出的界限,不论是宽还是高。
另一种文本测量方法
在这一点上,我看过Paint有另一种方法用于测量文本宽度:Paint.measureText()
这个方法只计算宽度而没有高度,于是我试着将两种方法联合使用:
int mTextWidth, mTextHeight; // 我们计算出来的文本界限Paint mTextPaint = new Paint();// 现在让我们计算文本尺寸Rect textBounds = new Rect();mTextPaint.getTextBounds(mText, 0, mText.length(), textBounds);mTextWidth = mTextPaint.measureText(mText); // 使用 measureText 来计算宽度mTextHeight = textBounds.height(); // 使用 getTextBounds() 计算出来的高度// 之后你进行绘制...canvas.drawText(mText, // 用于显示的文本 mBounds.centerX() - (mTextWidth / 2f), mBounds.centerY() + (mTextHeight / 2f), mTextPaint);
哎呀!由此产生了近乎完美的置中文本。
Related Posts
Support Libraries v22.1.0
22 Apr 2015
Theme vs Style
12 Nov 2014
Palette v21
20 Oct 2014
0 0
- 「译」Android文本测量
- Android文本测量
- Android文本的测量和绘制
- Android文本的测量和绘制
- Android文本的测量和绘制
- 设计师测量文本行距
- android字符测量
- Android View的测量
- Android View之测量
- Android 测量类MeasureSpec
- Android View 如何测量
- Android View的测量
- Android控件测量相关
- 【Android】【测量】MeasureSpec
- Android View的测量
- Android View 测量参数
- android动态测量控件
- Android View 测量
- Going Home(最小费用最大流模板)
- CSS3 去除苹果浏览器按钮input[type="submit"]和input[type="reset"]的默认样式
- 2.7-3 如何将Eclipse 项目导入Android studio中
- 算法相关
- Java排序算法:希尔排序
- 「译」Android文本测量
- VM 中Centos7 增加/目录容量
- CALayer 锚点
- Date和String类型相互转化
- JSP的自定义标签(三)之带标签体的标签
- C++二分法
- Servlet基本概念
- loadNibName 崩溃
- JS模块化工具requirejs