2012-07-05 131 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

相关问题