我觉得我已经尝试了一切。想到最后一件事:我需要 root 才能执行 getDrawingCache 吗?我认为我不应该这样做,因为当我玩它并在 onClick 的不同活动中尝试它时,这对我有用(即使它只保存了按钮背景)。GraphView 是我的班级将图表绘制到 Canvas 中。我没有忘记添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
我尝试只使用 bm.compress(Bitmap.CompressFormat.PNG, 100, fOut); 没有尝试和捕获,它会给出空异常。
这是代码:
GraphView graphView = new GraphView(this, y, "Dive Planner", horlabels, verlabels, GraphView.LINE, x, Pspotreba, pocetBodu, varovani);
setContentView(graphView);
graphView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
graphView.layout(0, 0, graphView.getMeasuredWidth(), graphView.getMeasuredHeight());
graphView.setDrawingCacheEnabled(true);
graphView.buildDrawingCache();
Bitmap bm=Bitmap.createBitmap(graphView.getDrawingCache(true));
//I have also tried Bitmap bm=graphView.getDrawingCache(true); and all the combinations (using/not using the code above)
FileOutputStream fOut = null;
try {
File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator + "DivePlanner" + File.separator);
if(!f.exists()) f.mkdirs();
File dive = new File(f, "Dive.png");
fOut = new FileOutputStream(dive);
}
catch (Exception e) {
Toast.makeText(this, "Error2", Toast.LENGTH_SHORT).show();
}
try {
bm.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();
Toast.makeText(this, "Ponor uložen", Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
}
很抱歉发布了类似的问题(我之前已经发布过类似的问题,但问题仍未得到解答,也许我解释得不够多,所以这是一个新的尝试)。这是我在学士论文中需要完成的最后一件事。我需要在下周二之前把它准备好。除了这个之外,其他一切在我的代码中都可以正常工作。提前谢谢,如果你能帮忙。