2011-02-25 98 views
5

我有一個視圖,它在裏面繪製一個帶有一行文本的矩形。該視圖使用中斷文本以確保沒有文本延伸到矩形之外;它會忽略任何文字。這對一些字符很好,但通常由'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); 
} 

回答

10

這是固定的:Paint.setSubpixelText(true);

0

問題可能是您如何畫矩形。筆畫不在矩形之外,筆畫的一半在裏面,一半在外面。

+0

我懷疑這是問題所在。給定的代碼假定整個筆畫在矩形內(這是考慮到「maxWidth」,「textX」和「textY」變量)。所以,如果有的話,文本應該比預期的更早打破,但不應超出矩形範圍。 – ab11 2011-02-25 18:41:45

+0

問題是未設置分數度量(子像素文本)。 – ab11 2011-03-01 15:28:47