2014-09-05 89 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將在畫布上的文字居中對齊的照顧。