Android: Paint.breakText (...) неточен? - PullRequest
       12

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

5 голосов
/ 25 февраля 2011

У меня есть вид, который рисует прямоугольник с линией текста внутри него.Представление использует текст разрыва, чтобы гарантировать, что текст не выходит за пределы прямоугольника;он игнорирует любой текст, который делает.Это хорошо работает для некоторых символов, но часто строки, состоящие из '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);
}

Ответы [ 2 ]

10 голосов
/ 01 марта 2011

Это было исправлено с помощью: Paint.setSubpixelText (true);

0 голосов
/ 25 февраля 2011

Проблема может заключаться в том, как вы рисуете свой прямоугольник. Штрихи не находятся вне прямоугольника, половина штриха находится внутри, половина - снаружи.

...