【Android】Canvas.drawTextの位置合わせ

カスタムViewなどでCanvas.drawTextにより直接文字列を描画する場合の位置合わせについて、よく忘れるのでメモ。

■あるポイントを中心に文字列を描画したい

  • X座標は文字列の幅の半分を引いた値を指定する
  • Y座標はFontMetricsからascentとdescentの和の半分を引く
String character = "A"; //描画したい文字列
Paint paint = new Paint();
FontMetrics metrics = paint.getFontMetrics(); //FontMetricsを取得
float textWidth = paint.measureText(character); //文字列の幅を取得
canvas.drawText(character,
                centerX - textWidth / 2,
                centerY - (metrics.ascent + metrics.descent) / 2,
                textPaint);

■FontMetrics

fontMetrics.top (緑)
fontMetrics.ascent (青)
fontMetrics.descent (シアン)
fontMetrics.bottom (マゼンタ)

の関係。

赤線がdrawTextに指定するベースとなるポイント。

ベースとなる座標からの相対座標のため、top、ascentはマイナス値、descent、bottomはプラス値が返ってくる。

  • このエントリーをはてなブックマークに追加