Поместите прямоугольник вокруг строки на холсте Android - PullRequest
5 голосов
/ 11 июня 2011

Поэтому я использую Canvas.drawText , чтобы нарисовать строку на Canvas .Проблема в том, что я хочу нарисовать прямоугольник перед ним, чтобы текст отображался по центру прямоугольника.Но я столкнулся с реальной проблемой.Предоставленные x и y координаты drawText на самом деле не находятся в углу " top left " реального текста, а скореестрока, где начинаются символы.Существует метод Paint.getTextBounds , который возвращает прямоугольник «с подразумеваемым происхождением» в (0,0) текста, который будет нарисован.Проблема в том, что источник находится на (0,0) .Ширина и высота этого поля правильны, но я не знаю, как разместить его верхний левый угол в верхнем левом углу строки, нарисованной на холсте.Думаю, мне следует использовать FontMetrics , но поскольку большая часть значений FontMetrics не документирована, я не совсем уверен, как их использовать для своих целей.

Ответы [ 2 ]

13 голосов
/ 12 июня 2011

Я закончил делать

FontMetrics fm = new FontMetrics();
paint.setTextAlign(Paint.Align.CENTER);
paint.getFontMetrics(fm);
canvas.drawText(text, x, y + -(fm.ascent + fm.descent) / 2, paint);

Который на самом деле рисует текст по центру x , y . Перед этим я рисую прямоугольник с центром в x , y с шириной paint.measureText ( text )

3 голосов
/ 11 июня 2011

попробуйте нарисовать прямоугольник, используя

canvas.drawRect(x, y - Paint.GetTextSize(), x + Paint.measureText("text"), y, Paint);

...