开发者

Android: is Paint.breakText(...) inaccurate? [duplicate]

This question already has answers here: Android: is Paint.breakText(...) inaccurate? (2 answers) Closed 8 years ago.

I have a View which draws a rectangle with a line of text inside of it. The view uses break text to ensure that no text extends outside of the rectangle; it ignores any text th开发者_运维百科at does. This works fine for some characters, but often Strings made up of 'l's and 'f's extend outside of the rectangle. So, I'm in need of a sanity check here: Is there some obvious flaw in my below 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);
    }


The line where you calculate maxWidth, don't you need "MARGIN * 2"?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜