У меня есть вид, который рисует прямоугольник с линией текста внутри него.Представление использует текст разрыва, чтобы гарантировать, что текст не выходит за пределы прямоугольника;он игнорирует любой текст, который делает.Это хорошо работает для некоторых символов, но часто строки, состоящие из 'l' и 'f, выходят за пределы прямоугольника.Итак, мне нужна проверка работоспособности: есть ли очевидный недостаток в моем коде ниже, или возможно, что Paint.breakText (...) неточен?
public void onDraw(Canvas canvas)
{
int MARGIN = 1;
int BORDER_WIDTH = 1;
Paint p = new Paint();
p.setAntiAlias(true);
p.setTextSize(12);
p.setTypeface(Typeface.create(Typeface.SERIF, Typeface.NORMAL));
RectF rect = getRect();
float maxWidth = rect.width() - MARGIN - BORDER_WIDTH * 2;
String str = getText();
char[] chars = str.toCharArray();
int nextPos = p.breakText(chars, 0, chars.length, maxWidth, null);
str = str.substring(0, nextPos);
float textX = MARGIN + BORDER_WIDTH;
float textY = (float) (Math.abs(p.getFontMetrics().ascent) + BORDER_WIDTH + MARGIN);
canvas.drawText(str, textX, textY, p);
p.setStrokeWidth(BORDER_WIDTH);
p.setStyle(Style.STROKE);
canvas.drawRect(rect, p);
}