Android:Paint.breakText(...)是不准确的?

ab1*_*b11 5 android paint typeface

我有一个View,它绘制一个矩形,里面有一行文字.视图使用中断文本以确保没有文本扩展到矩形之外; 它会忽略任何文本.这适用于某些角色,但通常由'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);
}
Run Code Online (Sandbox Code Playgroud)

ab1*_*b11 10

这是通过以下方法修复的:Paint.setSubpixelText(true);