private class SampleView extends View {
Private Paint mPaint;
public SampleView(Context context) {
super(context);
mPaint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
FontMetrics fm = null;
// 背景は白
canvas.drawColor(Color.WHITE);
// アンチエイリアス有り
mPaint.setAntiAlias(true);
// 描画色は黒
mPaint.setColor(Color.BLACK);
// フォントサイズの指定
mPaint.setTextSize(64);
fm = mPaint.getFontMetrics();
// 文字列リソースから取得する場合
canvas.drawText(getResources().getString(R.string.test), 100, 80, mPaint);
// 直接記述する場合
canvas.drawText("Abcdefg", 100, 160, mPaint);
// 座標位置(Y軸)はフォントのベースラインの値になるので
// 実際の描画位置は少し上になる。
// 座標位値(Y軸)をフォントの上限(Ascent)に合わせたい時は
// 下のように書く。
canvas.drawText("hijkLMN", 100, 240 + fm.ascent, mPaint);
}
FontMetricsのメンバ変数 ascent はフォントのベースラインから上限までの値(負の値)が入っているので、Y座標 + FontMetrics.ascentがフォントの上の部分の座標値になります。
文字列の幅はどうやって取ればいいのだろうと思っていたら、mPaint.getTextWidths(String str, float[] float)なるメソッドが。
これだ!と思ったら戻り値のintに入ったのは文字数・・・。
どうやら2番目の引数の中に各文字の幅が1文字ずつ入るメソッドのようなので、
String str = "Abcdefg";
float[] fl = new float[length];
int width = 0;
mPaint.getTextWidths(str, fl);
for(int i=0; i<length-1; i++) {
width += fl[i];
}
としました。
かっこ悪い気がするけど、他にどうやったら取れるかしら。
mPaintは上のコードのPaintクラスの変数です。
0 件のコメント:
コメントを投稿