【问题标题】:Centering Text on Android Canvas Including Accurate Bounds在 Android 画布上居中文本,包括准确的边界
【发布时间】:2014-10-30 20:45:51
【问题描述】:
情况是这样的。我正在渲染到画布。没有其他东西被渲染,画布实际上是全屏的。只有一个视图。
我想做一个简单的(文本)按钮。这包括两部分:直观地绘制它,并检查边界以查看它是否被按下。这两件事应该是一致的。
理想情况下,居中是可选的,但我希望切换它很简单。
经过太多小时后,我怀疑这不仅仅是对齐问题,而是问题根源在于 API 的使用。
如何做到这一点?
【问题讨论】:
标签:
android
text
android-canvas
centering
【解决方案1】:
只需使用静态布局,即使通过自动对齐文本将大小增加了一些限制,您也可以在画布内保持文本中心对齐。
Rect bounds = new Rect(x1, y1, x2, y2);// set the bounds
String textOnCanvas = "text to be wriiten";
StaticLayout sl = new StaticLayout(textOnCanvas, textPaint,
bounds.width(), Layout.Alignment.ALIGN_CENTER, 1, 1, true);
canvas.save();
float textHeight = getTextHeight(textOnCanvas, textPaint);
int numberOfTextLines = sl.getLineCount();
float textYCoordinate = bounds.exactCenterY() -
((numberOfTextLines * textHeight) / 2);
//text will be drawn from left
float textXCoordinate = bounds.left;
canvas.translate(textXCoordinate, textYCoordinate);
//draws static layout on canvas
sl.draw(canvas);
canvas.restore();
静态布局的参数Layout.Alignment.ALIGN_CENTER将负责画布中文本的居中对齐。