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

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

person ab11    schedule 22.02.2011    source источник


Ответы (1)


Строка, где вы вычисляете maxWidth, вам не нужна "MARGIN * 2"?

person kelnos    schedule 17.05.2011