Получение высоты и ширины текста с помощью Canvas

Я разрабатываю приложение для Android 2.2.

Я использую этот метод для рисования текста в представлении:

    public void draw(Canvas c)
    {
        p.setColor(Color.WHITE);
        if(name != null)
            c.drawText(name, getLeft(), getTop(), p);
    }

как я могу получить высоту и ширину текстового имени?

если я это сделаю (p-объект Paint):

p.getTextBounds(name, 0, name.length(), bounds);

С name = 'Loading', bounds = Rect(1, -10 - 42, 3);.

Я не знаю, почему я получаю этот странный прямоугольник.

любой ключ?

Это мое возможное решение:

public class MyView extends ARSphericalView
{
    public String name;

    public MyView(Context ctx)
    {
        super(ctx);
        inclination = 0;
    }

    public void draw(Canvas c)
    {
        /*
        p.setColor(Color.WHITE);
        if(name != null)
            c.drawText(name, getLeft(), getTop(), p);
        */
        p.setColor(Color.BLACK);
        if(name != null)
        {
            Rect bounds = new Rect();
            c.drawText(name, getLeft(), getTop(), p);
            setBackgroundColor(Color.WHITE);
            p.getTextBounds(name, 0, name.length(), bounds);
            c.drawRect(bounds, p);
        }
    }
}

но это не работает. Я понимаю это странно. прямоугольник.

2 ответов


размер текста измеряется от его базовой линии и имеет подъем (вверх, so-y) и спуск (вниз, y). Первое значение y в прямой кишке (-10) - это подъем, второе-спуск (3). Ширина текста 41 (42-1). Высота таким образом / восхождение / + / спуск / составляет 10 + 3 = 13;

аналогично p.getFontMetrics() имеет верхние и нижние атрибуты, которые описывают самый высокий подъем и спуск шрифта, который вы используете. Если вы хотите рассчитать высоту текста, то его Math.abs(p.ascent) + Math.abs(p.descent) вы также можете измерить ширину текста с p.measureText().


можно использовать Paint.setTextSize() чтобы установить размер текста, а затем нарисовать его в Canvas.