2014-09-05 87 views
0

这是情况。我正在渲染一个画布。没有其他东西被渲染,画布实际上是全屏。只有一种观点。Android版Canvas上的定位文本包括精确的边界

我想制作一个简单的(文本)按钮。这包括两部分:直观地绘制它,并检查边界以查看它是否被按下。这两件事应该是一致的。

理想情况下,居中是可选的,但我希望将其切换为简单。

经过太多的时间,我怀疑它不是一个简单的对齐问题,而且也是使用API​​是问题的根源。

这怎么办?

回答

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将在画布上的文字居中对齐的照顾。