1

我们的一位开发人员遇到了一个问题,其中Paint.breakText()(它说它计算“字符”)实际上是计算字形。

想象一下,您只包装了一个单词"fit"。它将适合在线,因此您希望breakText()返回 3。在某些设备上,确实如此;在其他人身上,“fi”形成一个连字,并breakText()返回2。这导致你画

fi
t

...这不是你想要的!

有没有

  1. 计数 Java 字符而不是字形 标志?breakText()或者
  2. 一种检测方法"fi"将被视为单个字形?
4

2 回答 2

2

这似乎不是最理想的,但我们处理它的方式是paint.breakText("fit", true, 1000, null) == 2用作bugExists标志,然后用于measureText()检查结果。

于 2013-12-05T19:10:03.660 回答
0

我在这里找到了如何做好:Android: is Paint.breakText(...) inaccurate?

我的代码是:

在 onCreate 上:

paintOfText.setSubpixelText(true);
breakTextNumber = paintOfText.breakText(textToBreak, true,
    maximumSizeOfText, null);

在渲染类上:

if (breakTextNumber < textToBreak.length()) {
    while (textToBreak.charAt(breakTextNumber) != ' ') {
        breakTextNumber--;
    }
    myCanvas.drawText(textToBreak.substring(0, breakTextNumber),
            placeToDrawX, placeToDrawY, paintOfText);
    myCanvas.drawText(
            textToBreak.substring(breakTextNumber+1),
            placeToDrawX, placeToDrawY2,, paintOfText);
    }
}

这只是将文本分成两行,用空格切割字符串。希望能帮助到你。

于 2015-07-02T10:32:38.253 回答