Search code examples
javaandroidandroid-activityandroid-canvasdrawtext

Android Center text on canvas


I'm trying to display a text using the code below. The problem is that the text is not centered horizontally. When I set the coordinates for drawText, it sets the bottom of the text at this position. I would like the text to be drawn so that the text is centered also horizontally.

This is a picture to display my problem further:

Screenshot

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    //canvas.drawRGB(2, 2, 200);
    Paint textPaint = new Paint();
    textPaint.setARGB(200, 254, 0, 0);
    textPaint.setTextAlign(Align.CENTER);
    textPaint.setTypeface(font);
    textPaint.setTextSize(300);
    canvas.drawText("Hello", canvas.getWidth()/2, canvas.getHeight()/2  , textPaint);
}

Solution

  • Try the following:

     Paint textPaint = new Paint();
     textPaint.setTextAlign(Paint.Align.CENTER);
    
     int xPos = (canvas.getWidth() / 2);
     int yPos = (int) ((canvas.getHeight() / 2) - ((textPaint.descent() + textPaint.ascent()) / 2)) ; 
     //((textPaint.descent() + textPaint.ascent()) / 2) is the distance from the baseline to the center.
    
     canvas.drawText("Hello", xPos, yPos, textPaint);