2011-06-30 139 views
2

此代碼可見應該將文本轉換爲圖像在畫布上繪製文本,並使其在屏幕上

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Paint paint = new Paint(); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setColor(Color.RED); 
     paint.setTextSize(16); 
     paint.setAntiAlias(true); 
     paint.setTypeface(Typeface.MONOSPACE); 

     Bitmap bm = Bitmap.createBitmap(16, 16, Bitmap.Config.ALPHA_8); 
     float x = bm.getWidth(); 
     float y = bm.getHeight(); 
     Canvas c = new Canvas(bm); 
     c.drawText("Test", x, y, paint); 
} 

這段代碼好嗎?如果是的話,我怎樣才能讓這個新的位圖在屏幕上可見?我嘗試這樣的代碼,產生我感到困惑與元件Canvas,因爲沒有在XML這樣的元素,我可以在代碼中使用的錯誤

setContentView(c); //<- ERROR! 

回答

3

setContentView(View)需要ViewCanvas不是View。我不確定你想自己創建Canvas。雖然有辦法從Android Framework傳遞給你一個Canvas。您可以通過創建自定義View來實現此目的。要做到這一點,你需要創建一個新的類,延伸View

當重寫View類時,您將有能力覆蓋onDraw(Canvas)方法。這可能是您想要在您發佈的代碼中執行您的onCreate()方法中所要做的事情的地方。

This link很好地概述了創建自己的自定義視圖所需的內容。

2

第一:如果您在指定的x和y位置繪製文本,則在右下角繪製它 ,從該像素開始。什麼都不會畫在你的畫布上。嘗試bm.getWidth()/ 2,對於測試繪圖而言,高度相同。您可以稍後進行優化。

第二:畫布不是視圖(不擴展View類)。您只能通過設置ContentView()來設置視圖。我在這裏推薦的是編寫一個只包含一個ImageView的XML佈局,並通過setContentView(R.layout.mylayout)進行設置。

之後,您可以使用findViewById()來獲取該ImageView並使用ImageView.setImageBitmap(bm)在其上顯示您的位圖。 一旦使用位圖創建了畫布,就不必對畫布進行任何操作。您立即在畫布內繪製的所有內容均可在Bitmap中找到。 因此,您不能在XML中指定畫布。這只是一個「編輯器」來編輯圖片,可以說,而不是一個實際的UI元素。

+0

您的文章也非常有幫助,但尼古拉斯指出了更多的觀點,讓我找到了解決方案。再次感謝。 – sandalone