私は内部にテキストを描画する矩形を持っています。テキストを縦と横の中央に揃えたいので、矩形内のすべての文字に合わせるためにテキストサイズを変更する必要があります。ここに私のコードは次のとおりです。矩形内のテキストの中央揃えと自動サイズ変更
@Override
public void drawFixedText(String text, Rect rect, Paint paint) {
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
int cX = rect.left;
int cY = rect.top;
float textSize = paint.getTextSize();
paint.setTextSize(textSize);
float textWidth = paint.measureText(text);
while (textWidth > rect.width()) {
textSize--;
paint.setTextSize(textSize);
}
//if cX and cY are the origin coordinates of the your rectangle
//cX-(textWidth/2) = The x-coordinate of the origin of the text being drawn
//cY+(textSize/2) = The y-coordinate of the origin of the text being drawn
canvas.drawText(text, cX-(textWidth/2), cY+(textSize/2), paint);
}
私はCalculate text size according to width of text areaとAndroid draw text into rectangle on center and crop it if needed
からの回答を結合しようとしたが、それはテキストが四角形の代わりに、その内部の左側に配置されていることで動作しませんでした。これをどうすれば解決できますか?
'cX'は' Rect'の左側ですので、テキストの幅の半分を減算したくありません。むしろ、あなたは 'Rect'の水平中点からそれを減算したいと思います。すなわち、rect.centerX() - (textWidth/2) 'である。また、サイズを変更した後は、毎回テキスト幅を測定する必要があります。つまり、 'textWidth = paint.measureText(text);'も 'setTextSize()'の呼び出しの後にループ内になければなりません。 –
これで、私はこれを行い、矩形の左上端の上に見かけ上テキストを移動させました。 –
これは、あなたが投稿したコードの場所です。私が示唆したようにx座標を変更した場合、テキストはRectの上辺の中央に配置する必要があります。あなたのビルドが最新であることを確認してください。つまり、変更後にクリーンで再構築します。また、私はちょうどそれが垂直にも中心に欲しいと気づいたので、あなたはY座標のために何か類似のことをする必要があります。 –