我是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));
}
我的方法肯定有问题,但我未能识别它。
答案 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中或者保存为用户客户的图片。
祝你好运,让我知道它是否有效!