2012-02-03 57 views
1

我是Canvas和Paint的入門者。我想在Canvas中繪製文本,但它可能比原始位圖更長。所以文本出去的位圖。在Canvas和多行中繪製文本

是否有某種類型的自動管理器爲此在達到目標時創建新行?還是應該玩高度和距離?由於

+0

如果您不介意使用Swing,[JTextArea](http://docs.oracle.com/javase/6/docs/api/javax/swing/JTextArea.html)將管理您的多行文本顯示爲你。 Canvas是一個AWT重量級對象,與輕量級控件混合使用可能會非常棘手。 JTextArea是一個輕量級的,這可能會導致更少的問題。 – 2012-02-03 13:59:15

回答

0

最好的辦法是繪製文本與StaticLayout:

// init StaticLayout for text 
StaticLayout textLayout = new StaticLayout(
    gText, paint, textWidth, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false); 

// get height of multiline text 
int textHeight = textLayout.getHeight(); 

// get position of text's top left corner 
float x = (bitmap.getWidth() - textWidth)/2; 
float y = (bitmap.getHeight() - textHeight)/2; 

// draw text to the Canvas center 
canvas.save(); 
canvas.translate(x, y); 
textLayout.draw(canvas); 
canvas.restore(); 

詳情請參閱my blogpost