4
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 吗?我的目标是生成具有特定形状和颜色的可绘制对象。

谢谢

4

2 回答 2

8

对于像你的圆圈这样的简单形状,我认为Shape Drawable会更容易。对于更复杂的事情,只需创建一个位图供您的 Canvas 使用,然后创建 Canvas 并在其中绘制,然后从您的位图创建一个 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);

可能有点迂腐(并希望增加您的理解),Canvas 只是托管“绘制”调用并绘制到您指定的位图中。这表示:

  1. 您的示例代码没有做太多,因为您没有使用位图构造 Canvas 或调用setBitmap()它。
  2. 您没有将 Canvas 转换为 Drawable,而是从您的 Canvas 调用绘制的位图构造一个 Drawable。
于 2012-07-05T22:22:14.153 回答
0

取自另一篇文章,这是执行此操作的伪代码。

画布上的图像到 JPEG 文件

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() 。

于 2012-07-05T18:09:15.880 回答