Получение высоты и ширины текста с помощью Canvas - PullRequest
10 голосов
/ 10 октября 2011

Я занимаюсь разработкой приложения для 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 ]

28 голосов
/ 10 октября 2011

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

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

0 голосов
/ 10 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...