Android: Paint.breakText (…) неточен?

У меня есть View, который рисует прямоугольник со строкой текста внутри него. В представлении используется разрыв текста, чтобы гарантировать, что текст не выходит за пределы прямоугольника; он игнорирует любой текст. Это отлично работает для некоторых символов, но часто строки, состоящие из 'l' и 'f' s выходят за пределы прямоугольника. Итак, мне нужна проверка работоспособности: есть ли очевидный недостаток в моем приведенном ниже коде или возможно, что 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);
}
5
задан Michael Myers 3 April 2014 в 14:27
поделиться