2011-02-22 68 views
0

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

回答

0

你計算maxWidth的行,你不需要「MARGIN * 2」嗎?