【发布时间】:2012-03-10 23:50:04
【问题描述】:
我目前正在渲染位图,然后我想将其发送到移动打印机。但是,我正在努力测量文本的高度,因此我可以适当地推进 y 位置。
我的基本位图/画布/绘画配置是这样的(字体大小为 16,位图的尺寸为 200x400(宽 x 高):
public MyRenderer() {
// Initialize bitmap
bitmap = Bitmap.createBitmap(200, 400, Bitmap.Config.ARGB_8888);
// Initialize canvas
canvas = new Canvas(bitmap);
// Initialize brush (Paint instance)
brush = new Paint();
brush.setTextSize(16);
brush.setTypeface(Typeface.SANS_SERIF);
brush.setColor(Color.BLACK);
brush.setStyle(Paint.Style.FILL);
brush.setAntiAlias(true);
brush.setTextAlign(Align.LEFT);
}
到目前为止一切顺利,现在我想做的是:如果我使用 Paint 的方法 drawText,我需要提供 x 和 y 坐标。至于 x 为零(假设文本左对齐),但至于 y,我必须计算我打印的每个文本的高度并将其相加,这样我就可以跟踪我当前的 y 位置。
这就是奇怪的地方:我正在使用以下方法来确定文本的高度(使用我之前初始化的 Paint 对象 - 它被称为“画笔”):
public int measureHeight(String text) {
Rect result = new Rect();
// Measure the text rectangle to get the height
brush.getTextBounds(text, 0, text.length(), result);
return result.height();
}
上述方法为以下文本返回以下值:
- "Hello World" 返回高度 12
- “相机实例可用于计算 3D 变换并生成矩阵。”返回高度为 16
- "Android 设计简介:学习创建世界级 Android 用户界面的原则、构建块和模式的地方。无论您是 UI 专业人士还是扮演该角色的开发人员,这些文档都会向您展示如何做出好的设计决策,无论大小。”返回 16 的高度
这对我来说很有意义,数字 2 和 3 返回的高度比数字 1 大,但是如果一行的高度为 12(就像第一行一样) - 多行的高度为 16 是没有意义的?
我在这里遗漏了什么吗?有一种方便的方法来测量文本的宽度(使用paint的实例并调用 measureText("myText") 效果很好,但是当涉及到高度时,我很茫然,正如上面给出的结果对我没有任何意义。
编辑
我知道,getTextBounds 可能不会自动换行多行文本,没关系,我已经写了一个分割文本的方法,但是即使它只是测量一行,上面给出的长度值仍然看起来不太可能。
【问题讨论】:
标签: android paint android-canvas