Как выровнять текст по вертикали?

Цель: Android> = 1.6 на чистом Canvas.

Предположим, я хочу написать функцию, которая будет рисовать большой красный прямоугольник (ширина, высота), а затем рисовать черный Hello World текст внутри. Я хочу, чтобы текст визуально находился в центре прямоугольника. Итак, давайте попробуем:

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);
}

Теперь я не знаю, что добавить в аргумент drawText, отмеченный ???? , т.е. я не знаю, как выровнять текст по вертикали.

Что-то вроде

???? = topLeftY + высота / 2 + fontHeight / 2 - fontHeight / 8;

, похоже, работает более или менее нормально, но должен быть способ получше.

46
задан weston 4 January 2017 в 19:40
поделиться