Я использую drawTextOnPath () для отображения некоторого текста на холсте, и мне нужно знать размеры рисуемого текста.Я знаю, что это невозможно для путей, состоящих из нескольких сегментов, кривых и т. Д., Но мой путь - это один сегмент, который является абсолютно горизонтальным.Я использую Paint.getTextBounds (), чтобы получить Rect с размерами текста, который я хочу нарисовать.
Я использую этот прямоугольник для рисования ограничивающего прямоугольника вокруг текста, когда я рисую его в произвольном месте.
Вот несколько упрощенных кодов, которые отражают то, что я в данный момент делаю:
// to keep this example simple, always at origin (0,0)
public drawBoundedText(Canvas canvas, String text, Paint paint) {
Rect textDims = new Rect();
paint.getTextBounds(text,0, text.length(), textDims);
float hOffset = 0;
float vOffset = paint.getFontMetrics().descent; // vertically centers text
float startX = textDims.left; / 0
float startY = textDims.bottom;
float endX = textDims.right;
float endY = textDims.bottom;
path.moveTo(startX, startY);
path.lineTo(endX, endY);
path.close();
// draw the text
canvas.drawTextOnPath(text, path, 0, vOffset, paint);
// draw bounding box
canvas.drawRect(textDims, paint);
}
Результаты - близкие, но не идеальные.Если я заменил вторую на последнюю строку:
canvas.drawText(text, startX, startY - vOffset, paint);
, тогда это работает отлично.Обычно на правом и нижнем краях имеется промежуток в 1-3 пикселя.Кажется, ошибка также зависит от размера шрифта.Есть идеи?Возможно, я все делаю правильно, и проблема в drawTextOnPath ();качество текста очень заметно ухудшается при рисовании вдоль путей, даже если путь горизонтальный, вероятно, из-за алгоритма интерполяции или какого-либо его использования за кулисами.Я не удивлюсь, узнав, что джиттер размера также исходит оттуда.