2

View を拡張するクラスがある場合、その View の中央にテキストを描画するにはどうすればよいですか? 私が使用しているテキストを描画するには、canvas.drawText描画後にテキストを移動できないため、このテキストを中央に配置する方法がわかりません。Androidビュークラスでテキストを中央に配置するにはどうすればよいですか

4

2 に答える 2

3
Paint mPaint = new Paint();
mPaint.setARGB(200, 254, 0, 0); //example
mPaint.setTextAlign(Align.CENTER);
int positionX = (canvas.getWidth() / 2);
int positionY = (int) ((canvas.getHeight() / 2) - ((mPaint.descent() + mPaint.ascent()) / 2)) ;
canvas.drawText("Hello", positionX, positionY, mPaint);
于 2013-03-21T00:43:25.300 に答える
2

精神的には、Maver1ck は正しい軌道に乗っていますが、実際にはそれよりも少し難しいです。をセットアップして、TextPaintいくつかの測定を行う必要があります。

TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
paint.setTextAlign(Paint.Align.CENTER); //Draw text from center
//setup any text size or color attributes

次に、テキストを垂直方向に中央揃えにする方法を決定します。表示されているテキストを中央に配置しますか? ベースラインを中心にしますか? テキストのトップまたはアセントに基づいてセンタリングしますか? テキストが複雑です。単純なケースとして、フォントの下部と上部の間を中央に配置するとしましょう (これは絶対的な上部と下部ではないことに注意してください。これは上昇と下降になります)。

//Do this somewhere where you can cache it -- no need to do this on every draw.
//onSizeChanged() is a good place.

FontMetrics metrics = paint.getFontMetrics();
float height = Math.abs(metrics.top - metrics.bottom);
float x = getWidth() / 2;
float y = (getHeight() / 2) + (height / 2);

次に、あなたのonDraw()

canvas.drawText("My Text", x, y, paint);
于 2013-03-21T00:50:17.513 に答える