0

我对 android 平台相当陌生canvas.drawPath(path, paint),为了在页面上生成绘图,我覆盖了 CustomView 的 onDraw 方法。

但是,我尝试保存此绘图以用于另一个活动(最后一页),其中可以并排显示多个已保存的绘图,但我经常遇到最终页面上没有图像的问题。

我想知道如何处理这种情况。我在 SO 上阅读了有关将绘图存储为位图并稍后重新构建的帖子。所以我在Android上使用Convert view to bitmap

public static Bitmap getBitmapFromView(View view) { ...

从包含原始绘图的自定义视图中提取位图。然后,我使用提取的位图创建了一个画布

Bitmap map = getBitmapFromView(cView);
Canvas canvas = new Canvas(map);

并将此画布附加到 Canvas 对象的静态列表中。

在用于并排显示所有图纸的活动中,我有

RelativeLayout layout = (RelativeLayout) findViewById(R.id.activity_display);
for (int x=0; x < canvasList.size(); x++) {
    Canvas currCanvas = canvasList.get(x) 
    View view = new View(this);
    view.draw(currCanvas);
    layout.addView(canvasList.get(x));
}

我的方法肯定有问题,但我未能识别出来。

4

2 回答 2

1

那么,您是否尝试过在 getBitmapFromView 中显示 bitmapRecieved 以验证它是否有效?

然后下一步是将其存储在静态类中,并尝试将其显示在另一个活动中,以确保存储按计划进行。

在您的最后一个代码片段上:您正在创建一个视图,在其画布上绘图,然后将画布添加到布局中?没有进一步研究合乎逻辑的事情,似乎将视图添加到布局中还是我错了?

于 2013-09-18T21:12:33.303 回答
1

尝试使用捆绑保存实例。我将使用位图数组,而不是使用 canvasList:

    @Override
    protected void onSaveInstanceState(Bundle state) {
        super.onSaveInstanceState(state);
        state.putSerializable("starttime", startTime);
        for(int i=0; i<bmp.size; i++){
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp[i].compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();
        state.putByteArray("img"+i, byte[] value);

    }

@Override
 protected void onCreate(Bundle bundle) {
   super.onCreate(bundle);

   if ((bundle != null)
           for(int i=0; bundle.getByteArray("img"+i) != null; i++) {
                   //Load byteArray back to bitmap array
           } 
}

我还没有测试代码,所以可能存在一些问题。有很多方法可以实现您想要的,您也可以保存在可绘制对象中或在用户客户端保存为图片。

祝你好运,让我知道它是否有效!

于 2013-09-18T21:41:43.540 回答