【问题标题】:Converting Canvas to Drawable将 Canvas 转换为 Drawable
【发布时间】:2012-07-06 04:34:20
【问题描述】:
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?我的目标是生成具有特定形状和颜色的可绘制对象。

谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    对于像你的圆圈这样的简单形状,我认为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. 您的示例代码并没有做太多的事情,因为您没有使用位图构造您的画布或在其上调用setBitmap()
    2. 您没有将 Canvas 转换为 Drawable,而是从您的 Canvas 调用的位图中构建一个 Drawable。

    【讨论】:

    • Shape Drawables 听起来对我来说已经足够好了。我创建了一些 xml,但是当我尝试绘制它们时我看不到它们。不过,我的普通 png 文件可以正常工作..
    • @Johan 这听起来像是一个完全不同的问题,你应该尝试自己解决这个问题,然后在必要时提出另一个问题。
    【解决方案2】:

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

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

    【讨论】:

    • 好的,viewfos 的类型是什么?
    • 你不必使用视图,你可以设置一个宽度和一个高度。至于 fos 就是 OutputStream。您只需要一个临时缓冲区,例如: ByteArrayOutputStream baos = new ByteArrayOutputStream();我已更新我的答案以包含此更改。
    • 好的,但是我如何在没有视图的情况下使用draw()
    • 你现在画得怎么样,你必须有一个视图以某种方式进行画布绘制。最常见的方法是扩展视图的类,因此您只需调用 draw(canvas) 而不是 view.draw(canvas)
    • 我目前正在使用OverlayItems 类作为 android 谷歌地图示例。他们使用可绘制对象作为标记
    猜你喜欢
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多