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

时间:2011-02-22 19:18:15

标签: 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);
    }

1 个答案:

答案 0 :(得分:0)

你计算maxWidth的行,你不需要“MARGIN * 2”吗?