Luís Jesus Luís Jesus - 1 year ago 143
Android Question

Center text on a bitmap

I'm trying to draw a text on the center of a bitmap however I can't do it even though I used The code is:

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); bitmapConfig =
// set default bitmap config if none
if(bitmapConfig == null) {
bitmapConfig =;
// 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.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?

Answer Source

It's a lot more straightforward than you think.

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

The alignment property will take care of the rest.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download