Bitmap center text

I am trying to draw text in the center of a bitmap, but I cannot do this, although I used align.center. The code:

public Bitmap drawTextToBitmap(Context gContext, String gText) {
    Resources resources = gContext.getResources();
    float scale = resources.getDisplayMetrics().density;
    Bitmap bitmap = 
            BitmapFactory.decodeResource(resources, R.drawable.blank_marker);

    android.graphics.Bitmap.Config bitmapConfig =
            bitmap.getConfig();
    // set default bitmap config if none
    if(bitmapConfig == null) {
        bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
    }
    // resource bitmaps are imutable, 
    // so we need to convert it to mutable one
    bitmap = bitmap.copy(bitmapConfig, true);

    Canvas canvas = new Canvas(bitmap);
    // new antialised Paint
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    // text color - #3D3D3D
    paint.setColor(Color.rgb(61, 61, 61));
    // text size in pixels
    paint.setTextSize((int) (25 * scale));
    // text shadow
    paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);

    // draw text to the Canvas center
    Rect bounds = new Rect();
    paint.setTextAlign(Align.CENTER);

    paint.getTextBounds(gText, 0, gText.length(), bounds);
    int x = (bitmap.getWidth() - bounds.width())/2;
    int y = (bitmap.getHeight() + bounds.height())/2; 

    canvas.drawText(gText, x * scale, y * scale, paint);

    return bitmap;
}

What am I doing wrong?

+5
source share
3 answers

This is much more straight forward than you think.

Draw text at half width and height Bitmap(center) in combination with Paint.setTextAlign(Align.CENTER).

The alignment property takes care of the rest.

+12
source

I think none of the above answers are good enough, so I am posting my answer. Try this guys, it will work on all devices and will not be complicated:

    Canvas canvas = new Canvas(bitmap);

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    //paint.setTextAlign(Align.CENTER);
    paint.setColor(activity.getResources().getColor(R.color.white));
    paint.setTextSize(30);

    // draw text to the Canvas center
    Rect boundsText = new Rect();
    paint.getTextBounds(String.valueOf(cluster.getMarkerList().size()),
            0, String.valueOf(cluster.getMarkerList().size()).length(),
            boundsText);
    int x = (bitmap.getWidth() - boundsText.width()) / 2;
    int y = (bitmap.getHeight() + boundsText.height()) / 2;

    canvas.drawText(String.valueOf(cluster.getMarkerList().size()), x,
            y, paint);
+1
source

Where is the text? The problem may be that you changed the alignment of the text to Align.CENTER. Your code that computes x and y assumes text rendering uses Align.LEFT, I suppose.

Use setTextAlign (Align.CENTER) and render in the real center of the bitmap or use setTextAlign (Align.LEFT) and use the current x and y calculations that you use.

0
source

All Articles