在 canvas 上绘制文本不适用于可变位图

Draw text on canvas dont work with mutable bitmap

我想在 Android 应用程序的 google 地图上使用自定义标记。 为此,我有一个方法可以为我创建位图。每个位图都是一个标记,上面包含特殊文本。 我已经这样做了,它在我的 2.3.3 Android 上工作正常。但是在其他设备上它崩溃了,因为我不使用 mutable Bitmaps。 我将我的代码更改为可变位图,但现在文本不可见,只有没有文本的标记位图。

我的方法:

Bitmap bm = BitmapFactory.decodeResource(context.getResources(), R.drawable.marker);

Typeface tf = Typeface.create("Helvetica", Typeface.BOLD);

Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
paint.setTypeface(tf);
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(convertToPixels(context, 8));

Rect textRect = new Rect();
paint.getTextBounds(markerText, 0, markerText.length(), textRect);
// THIS LINE IS NEW FOR MUTABLE
Bitmap mutableBitmap = bm.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(mutableBitmap);

if(textRect.width() >= (canvas.getWidth() - 4)){
    paint.setTextSize(convertToPixels(context, 7));
}
int xPos = (canvas.getWidth() / 2) - 2;
int yPos = (int) ((canvas.getHeight() / 2) - ((paint.descent() + paint.ascent()) / 2)) ;

canvas.drawText(markerText, xPos, yPos, paint);

return  bm;

我做错了什么?我只是添加了带有 mutable.

的行

此致

您的方法 return 是您使用 BitmapFactory.decodeResource() 获得的不可变位图。

您必须return您绘制的可变位图:

return mutableBitmap;