Android: is Paint.breakText (...) inaccurate?

I have a view that draws a rectangle with a line of text inside it. The view uses interrupt text to ensure that the text does not go beyond the rectangle; it ignores any text. This works fine for some characters, but often lines consisting of "l" and "f" go beyond the rectangle. So, I need a good sense check here: Are there some flaws in my lower code, or is it possible that Paint.breakText (...) is inaccurate?

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
source share
2 answers

This has been fixed: Paint.setSubpixelText (true);

+10
source

, . , , .

0

All Articles