我目前正致力於渲染位圖,然後再發送到移動打印機。然而,我正在努力測量我的文本的高度,所以我可以適當地提高y的位置。安卓:在畫布上測量文字高度
我的基本的位圖/月/漆的配置是這樣的(字體大小爲16和位圖的尺寸是200x400(寬x高):
public MyRenderer() {
// Initialize bitmap
bitmap = Bitmap.createBitmap(200, 400, Bitmap.Config.ARGB_8888);
// Initialize canvas
canvas = new Canvas(bitmap);
// Initialize brush (Paint instance)
brush = new Paint();
brush.setTextSize(16);
brush.setTypeface(Typeface.SANS_SERIF);
brush.setColor(Color.BLACK);
brush.setStyle(Paint.Style.FILL);
brush.setAntiAlias(true);
brush.setTextAlign(Align.LEFT);
}
到目前爲止好,現在我想do是:如果我使用Paint的方法drawText,我需要提供x和y座標,至於x是零(假設左對齊文本),但是對於y,我必須計算每個文本的高度,加上它,所以我可以跟蹤我當前的y位置
而這就是奇怪的地方:我使用以下方法來確定文本的高度(使用Pai NT反對說,我以前初始化 - 這就是所謂的「刷」):
public int measureHeight(String text) {
Rect result = new Rect();
// Measure the text rectangle to get the height
brush.getTextBounds(text, 0, text.length(), result);
return result.height();
}
上述方法下列文本返回下列值:
- 「的Hello World」返回高度12
- 「攝像機實例可用於計算3D變換並生成矩陣。「返回高度
- 」Android設計簡介:瞭解創建世界級Android用戶界面的原理,構建模塊和模式的地方。無論您是UI專業人員還是擔任此職位的開發人員,這些文檔都會告訴您如何做出大大小小的優秀設計決策。「返回
是有意義的我的高度,即2號和3返回比數1,但具有更大的高度,如果一個線具有12的高度(如頭號一樣) - 它沒有任何意義,多行有16的高度?
我在這裏丟失了什麼嗎?有一個方便的方法來測量文本的寬度(使用paint和調用measureText(「myText」)的實例完美的作品,但是我相當茫然,談到高度,因爲上面給出的結果對我來說沒有任何意義。
編輯
我知道,那getTextBounds大概會多行文本沒有自動換行,這是很正常的,我已經寫了拆分文本的方法,但即使它只是衡量一個線,上述給定的長度值似乎不太可能。
我計算的基線距離(按你的計算),對於給定的文本上面那三個,它總是返回19將這意味着,如果我拿19的高度,那麼下一行仍然有足夠的空間不與當前行重疊?非常感謝您提前! – AgentKnopf 2012-02-21 06:40:48
這是字體的一個特點,您不必爲不同的文本重複計算。無論文本包含哪些字符,您都希望距離始終相同。是的,這些線不會重疊。 – devconsole 2012-02-21 09:17:00
非常感謝你 - 這就是我所做的和呈現我的位圖現在工作得很好:)。我在MyRenderer的構造函數中初始化「行高」。 – AgentKnopf 2012-02-21 09:59:52