FontMetrics

Android をいろいろ勉強中...。


今日は文字列を中央に配置するというのをやった。

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(36f);
FontMetrics fm = paint.getFontMetrics();
float center = -1*(fm.ascent+fm.descent)/2;
paint.setColor(Color.RED);
String text = "Hello,World!";
canvas.drawText(text,getWidth()/2,getHeight()/2+center,paint);

「Paint.ANTI_ALIAS_FLAG」はアンチエイリアスを有効にする。

「(fm.ascent+fm.descent) / 2 」は文字の高さの中央を求める。


文字の描画の基準は一番下(正確には、baseLine)になるので、
描画位置を getHeight()/2 にすると
キャンパスの真ん中が文字の一番下にあたる。
そのため、getHeight()/2 に 文字の中央にあたる center 分、下へ移動する。


すると、文字がキャンパスの中央に配置される。


おまけ画像。
f:id:t-kashima:20100710010437p:image:h120


ref:

テキストの描画(FontMetrics) - Android Wiki*