我有一個視圖,它在裏面繪製一個帶有一行文本的矩形。該視圖使用中斷文本以確保沒有文本延伸到矩形之外;它會忽略任何文字。這對一些字符很好,但通常由'l'和'f'組成的字符串延伸到矩形之外。所以,我需要在這裏進行理智檢查:在我的下面的代碼中是否存在一些明顯的缺陷,或者可能Paint.breakText(...)不準確?Android:是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);
}
我懷疑這是問題所在。給定的代碼假定整個筆畫在矩形內(這是考慮到「maxWidth」,「textX」和「textY」變量)。所以,如果有的話,文本應該比預期的更早打破,但不應超出矩形範圍。 – ab11 2011-02-25 18:41:45
問題是未設置分數度量(子像素文本)。 – ab11 2011-03-01 15:28:47