Получение высоты и ширины текста с помощью 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
.