1

所以我最初从下面的代码开始:

private Bitmap writeTextOnDrawable(int drawableId, String text) {

    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId);
    Bitmap alteredBitmap = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());
    Canvas canvas = new Canvas(alteredBitmap);
    Paint paint = new Paint();
    canvas.drawBitmap(bm, 0, 0, paint);
    paint.setColor(Color.WHITE); 
    paint.setTextSize(150f); 
    canvas.drawText(text, 100, 1000, paint); 

    return alteredBitmap;
}

它按预期工作,背景图像在那里,文本也在那里,除了文本对屏幕来说太长,我需要以某种方式包装它。

然后我查看TextPaintStaticLayout使用此代码处理多行问题。

private Bitmap writeTextOnDrawable(int drawableId, String text) {

    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId);
    Bitmap alteredBitmap = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());
    Canvas canvas = new Canvas(alteredBitmap);
    TextPaint tp = new TextPaint();
    canvas.save();
    tp.setColor(Color.WHITE);
    tp.setTextSize(150f);
    tp.setTextAlign(Align.CENTER);
    tp.setAntiAlias(true);
    StaticLayout sl = new StaticLayout("" + text, tp,
            canvas.getWidth(), Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
    canvas.translate(100, 1000);
    sl.draw(canvas);

    return alteredBitmap;
}

这根本不起作用。我的背景图像现在消失了,它什么都没有显示。之前的文字没有居中。唯一的好处是文本现在是多行的。

有谁知道为什么文本改变了它的初始起点以及为什么画布的背景图像消失了?任何帮助将不胜感激。

4

1 回答 1

1

由于 canvas.translate() 函数,您的文本从初始起点转移。我不知道为什么您的背景图像消失了,因为您从未提到位图在哪里(如何)使用。如果您希望文本出现在视图的左上角,这里有一个示例。

创建 ImageView (iv) 并将其位图设置为:

iv.setImageBitmap(writeTextOnDrawable(drawableId, text));

现在你的功能:

private Bitmap writeTextOnDrawable(int drawableId, String text) {

    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId);
    // Create your ImageView-size bitmap
    Bitmap alteredBitmap = Bitmap.createBitmap(iv.getWidth(), iv.getHeight(), bm.getConfig());
    Canvas canvas = new Canvas(alteredBitmap);
    TextPaint tp = new TextPaint();
    tp.setColor(Color.WHITE);
    tp.setTextSize(24);
    tp.setAntiAlias(true);
    StaticLayout sl = new StaticLayout(text, tp,
        iv.getWidth(), Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
    sl.draw(canvas);

    return alteredBitmap;
}

之后,您应该会在背景图像上看到多行文本。

于 2014-03-11T03:41:51.223 回答