我想将视图的图像发送到外部存储,以便可以打印它。该视图是由表格布局,表格行和文本视图组成的网格。我将视图写入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);

10-08 07:18