1
私はすべてのスペースをカバーするために、テキストサイズを調整して、縦横の中央に配置されたビットマップでテキストを描画する必要があります。問題は、テキストが\n
の複数行であることです。これは現在のコードです:キャンバスdrawtext複数行を中心に
private int determineMaxTextSize(String str, float maxWidth) {
int size = 0;
if (TextUtils.isEmpty(str))
return 0;
Paint paint = new Paint();
do {
paint.setTextSize(++size);
} while (paint.measureText(str) < maxWidth);
return size > 0 ? size - 1 : 0;
}
private void drawText(String text, int textColor, int bckColor) {
TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
int max = Integer.MAX_VALUE;
String[] tokens = text.split("\n");
for (String s : tokens) {
int m = determineMaxTextSize(s, params.width);
if (m > 0 && m < max)
max = m;
}
paint.setTextSize(max);
paint.setColor(textColor);
paint.setTextAlign(Paint.Align.CENTER);
Bitmap b = Bitmap.createBitmap(params.width + 1, params.height + 1, Bitmap.Config.ARGB_8888);
b.eraseColor(bckColor);
Canvas canvas = new Canvas(b);
Rect r = new Rect();
int xPos = canvas.getWidth()/2;
int yPos = (canvas.getHeight()/2);
for (String s : tokens) {
if (s.equals("\n"))
s = " ";
paint.getTextBounds(s, 0, s.length(), r);
canvas.drawText(s, xPos, yPos, paint);
yPos += Math.abs(r.height());
}
setImageBitmap(b);
}
このコードはほとんど動作しますが、テキストは中央から始まります。