2012-07-05 80 views
1
int x = 10; 
int y = 10; 
int r = 4; 
Paint mPaint = new Paint(); 
mPaint.setColor(0xFF0000); 
Canvas mCanvas = new Canvas(); 
mCanvas.drawCircle(x,y,r,mPaint); 

有什麼辦法可以將mCanvas轉換成Drawable?我的目標是生成具有特定形狀和顏色的drawable。將Canvas轉換爲Drawable

感謝

回答

4

對於簡單的形狀像你的圈子,我認爲Shape Drawable會更容易。對於更復雜的事情,只需爲您的Canvas創建一個Bitmap來使用,然後創建Canvas並將其繪製,然後從您的Bitmap創建一個Drawable。喜歡的東西:

int x = 10; 
int y = 10; 
int r = 4; 

Paint mPaint = new Paint(); 
mPaint.setColor(0xFF0000); 

Bitmap bitmap = Bitmap.createBitmap(/* read the docs*/); 
Canvas mCanvas = new Canvas(bitmap); 
mCanvas.drawCircle(x,y,r,mPaint); 

BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap); 

要有些可能迂腐(希望提高你的理解),畫布剛主持「畫」的呼叫,並繪製到您指定的位圖。這意味着:

  1. 你的示例代碼沒有做太多,因爲你沒有建立你的畫布與位圖或調用它setBitmap()
  2. 您並不是將您的Canvas轉換爲Drawable,而是通過Canvas調用的位圖構造Drawable。
+0

Shape Drawables聽起來不錯,適合我的情況。我創建了一些xml,但是當我嘗試繪製它們時,我沒有看到它們。我的普通PNG文件雖然工作正常,但.. – Johan 2012-07-05 22:50:11

+0

@Johan這聽起來像一個完全不同的問題,你應該嘗試自己解決,然後問如果有必要的另一個問題。 – 2012-07-05 23:04:32

0

從其他崗位採取這裏是僞代碼來做到這一點。

Image on canvas to JPEG file

ByteArrayOutputStream baos = new ByteArrayOutputStream() 
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(bitmap); 
view.draw(canvas); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 

// This converts the bitmap to a drawable 
BitmapDrawable mDrawable = new BitmapDrawable(getResources(),bitmap); 

或者,你可以使用getDrawingCache()作爲在該線程的另一個答案概括。

+0

好的,'view'和'fos'的類型是什麼? – Johan 2012-07-05 18:14:21

+0

您不必使用視圖,只需設置寬度和高度即可。至於這是OutputStream的fos。您只需要一個臨時緩衝區,例如:ByteArrayOutputStream baos = new ByteArrayOutputStream();我已經更新了我的答案以包含此更改。 – 2012-07-05 18:18:33

+0

好吧,但我如何使用'draw()'沒有視圖? – Johan 2012-07-05 18:34:17

相關問題