Android在视图中保存/显示绘制的图像

时间:2013-09-18 20:46:25

标签: java android android-canvas android-view

我是Android平台的新手,我用canvas.drawPath(path, paint)覆盖了CustomView的onDraw方法,以便在页面上生成图纸。

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

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

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));
}

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

2 个答案:

答案 0 :(得分:1)

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

然后下一步是将它存储在静态类中,并尝试以另一种方式显示它以确保按计划存储工作。

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

答案 1 :(得分:1)

尝试使用Bundle savedInstance。我将使用位图数组而不是使用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
           } 
}

我没有测试过代码,因此可能存在一些问题。有很多方法可以实现你想要的,你也可以保存在drawable中或者保存为用户客户的图片。

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