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