我想将视图的图像发送到外部存储,以便可以打印它。该视图是由表格布局,表格行和文本视图组成的网格。我将视图写入sdcard,然后使用DDMS文件浏览器屏幕将其复制到HD。但是当我在MS Paint中查看它时,图像仅部分存在。
我已经测试了这两种方式。
当我使用xml版本时,结果是一个小的黑色正方形–没有细节,没有网格,什么也没有。
接下来,我以编程方式创建了一个textview,使用settext(“ AAA”)编写了文本。生成的位图具有正确的颜色和大小,但缺少文本。
有人可以告诉我如何将我的视图正确写入外部存储设备,使其看起来像在Android屏幕上吗?
//FYI. Here are excerpts from my program:
//Test-1 used the xml version of the grid:
TableLayout tl = (TableLayout) findViewById(R.id.board);
View viewToBeConverted = tl;
//Test-2 used a simple dynamically generated view:
TextView tv = new TextView(this);
tv.setBackgroundColor(Color.PINK);
tv.setTextColor(Color.BLACK);
tv.setText("AAA");
tv.setHeight(40);
tv.setWidth(40);
View viewToBeConverted = tv;
//Both Tests used this code to write to external storage:
try {
Bitmap returnedBitmap = Bitmap.createBitmap(40,40,
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
viewToBeConverted.draw(canvas);
String path = Environment.getExternalStorageDirectory() +
File.separator + strPuzSolFilename;
FileOutputStream out = new FileOutputStream(path);
} catch (Exception e) {
e.printStackTrace();
}
最佳答案
documentation for draw
说:
在调用此函数之前,视图必须已经完成了完整的布局。
这意味着您必须先调用viewToBeConverted.layout(0,0,40,40)
才能调用viewToBeConverted.draw(canvas)
。
编辑:在我了解您的示例中实际发生的事情之前,我将不得不搜索有关Android绘图的更多信息…
但是,如果您只是在寻找从给定的Bitmap
中获取View
的方法,则建议您查看getDrawingCache()
方法。
例如:
viewToBeConverted.setDrawingCacheEnabled(true);
Bitmap returnedBitmap = viewToBeConverted.getDrawingCache(false);