0
这是情况。我正在渲染一个画布。没有其他东西被渲染,画布实际上是全屏。只有一种观点。Android版Canvas上的定位文本包括精确的边界
我想制作一个简单的(文本)按钮。这包括两部分:直观地绘制它,并检查边界以查看它是否被按下。这两件事应该是一致的。
理想情况下,居中是可选的,但我希望将其切换为简单。
经过太多的时间,我怀疑它不是一个简单的对齐问题,而且也是使用API是问题的根源。
这怎么办?
这是情况。我正在渲染一个画布。没有其他东西被渲染,画布实际上是全屏。只有一种观点。Android版Canvas上的定位文本包括精确的边界
我想制作一个简单的(文本)按钮。这包括两部分:直观地绘制它,并检查边界以查看它是否被按下。这两件事应该是一致的。
理想情况下,居中是可选的,但我希望将其切换为简单。
经过太多的时间,我怀疑它不是一个简单的对齐问题,而且也是使用API是问题的根源。
这怎么办?
只需使用静态布局,然后即使通过自动对齐文本使大小增加了一定限制,您仍可以保持文本中心在画布内对齐。静态布局的
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将在画布上的文字居中对齐的照顾。