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