2

我有一个按需创建的位图。该位图将包含一个 Canvas,其中包含一些文本。

正如你可以想象的那样,这个位图将有一个固定的大小,这取决于要在画布中写入的字符的长度以及指定的文本大小。

例如:

我触发这样的方法:

createBitmapText("This is text", 25); 

那么现在,如何计算位图的大小?

我试过类似的东西:

int width = text.lenght * textSize;

但是,对于小字符串,它似乎可以工作,但在长字符串上,有一个很大的空白空间。

有小费吗?

这是我的代码 ATM:

public void createBlabla(String text, int fontSize){
    int padding = 15;

    Bitmap largeWhiteBitmap = Bitmap.createBitmap(fontSize * text.length(), fontSize + padding, Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(largeWhiteBitmap);

    canvas.drawColor(0xffffffff);

    Paint paint = new Paint();

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));
    paint.setTextSize(fontSize);
    paint.setAntiAlias(true);
    canvas.drawText(text, padding, fontSize, paint);


    ImageView imv = (ImageView)MainActivity.this.findViewById(R.id.imageView1);
    imv.setImageBitmap(largeWhiteBitmap);
}

使用示例:

createBlabla("APP", 25);

结果是:

在此处输入图像描述

如您所见,它看起来不错。

但是,第二个例子:

createBlabla("LONGER", 25);

在此处输入图像描述

createBlabla("LONGEST TEXT EVAH", 25);

在此处输入图像描述

4

1 回答 1

5

您可以测量您输入的文本的宽度(以像素为单位)并相应地设置位图的宽度

Paint paint = new Paint();
paint.setTypeface(Typeface.DEFAULT);
paint.setTextSize(fontSize);
float textWidth = paint.measureText(text)
于 2013-11-11T21:23:01.280 回答