Target: Android >= 1.6 on a pure Canvas.
Suppose I want to write a function that will draw a (width, height) large red rectangle and then draw a black Hello World text inside. I want the text to be visually in the center of the rectangle. So let's try:
void drawHelloRectangle(Canvas c, int topLeftX,
int topLeftY, int width, int height) {
Paint mPaint = new Paint();
// height of 'Hello World'; height*0.7 looks good
int fontHeight = (int)(height*0.7);
mPaint.setColor(COLOR_RED);
mPaint.setStyle(Style.FILL);
c.drawRect( topLeftX, topLeftY, topLeftX+width, topLeftY+height, mPaint);
mPaint.setTextSize(fontHeight);
mPaint.setColor(COLOR_BLACK);
mPaint.setTextAlign(Align.CENTER);
c.drawText( "Hello World", topLeftX+width/2, ????, mPaint);
}
Now I don't know what to put in drawText's argument marked by ????, i.e. I don't know how to vertically align the text.
Something like
???? = topLeftY + height/2 + fontHeight/2 - fontHeight/8;
appears to work more or less ok, but there must be a better way.
Example to centre on
cxandcy:Why doesn't
height()/2fwork the same?exactCentre()=(top + bottom) / 2f.height()/2f=(bottom - top) / 2fThese would only yield the same result when
topis0. This may be the case for some fonts at all sizes, or other fonts at some sizes, but not for all fonts at all sizes.