5

したがって、 Canvas. drawTextを使用してCanvasに文字列を描画します。問題は、テキストが長方形の中央に表示されるように、その前に長方形を描きたいということです。しかし、私は本当の問題にぶつかりました。drawTextに指定されたx座標とy座標は、実際には実際のテキストの "左上" 隅ではなく、文字が始まる行にあります。描画されるテキストの(0,0)に「暗黙の原点を持つ」長方形を返すメソッドPaint.getTextBoundsがあります。問題は、原点が(0,0)にあることです. そのボックスの幅と高さは正しいですが、キャンバスに描かれた文字列の左上隅に左上隅を配置する方法がわかりません。FontMetricsを使用する必要があると思いますが、 FontMetricsが返す値の多くは文書化されていないため、目的のためにそれらを使用する方法がよくわかりません。

4

2 に答える 2

13

私はやることになりました

FontMetrics fm = new FontMetrics();
paint.setTextAlign(Paint.Align.CENTER);
paint.getFontMetrics(fm);
canvas.drawText(text, x, y + -(fm.ascent + fm.descent) / 2, paint);

これは実際にxyを中心にテキストを描画します。その前に、xyを中心に、幅がpaint.measureText(text)の長方形を描画します。

于 2011-06-12T16:24:25.017 に答える
3

を使用して長方形を描画してみてください

canvas.drawRect(x, y - Paint.GetTextSize(), x + Paint.measureText("text"), y, Paint);

于 2011-06-11T18:35:23.333 に答える