将ViewGroup捕获到图像文件中

时间:2012-05-17 22:49:31

标签: java android android-layout screen-capture

我有一个ImageView和两个TextViews的简单组合。我想TextViews重叠ImageView,然后将整个组合保存(例如PNG)。

我知道我可以使用TextViewsImageView分层到FrameLayout上,我已经在做了。现在我想知道的是,如何将其导出到图像?

我阅读了有关使用Canvas的各种帖子。有没有办法将FrameLayout导出为PNG图像,或者我是否需要创建画布,添加ImageViewTextViews,并将画布本身导出为PNG?

提前谢谢。

1 个答案:

答案 0 :(得分:6)

可以轻松完成吗?,是

如何吗

好吧,前几天我碰巧已经为此做了一个功能,而且非常简单(确保你有写入外部设备的权限)。你所要做的就是指定你想要“绘制”到Bitmap的视图(它也将包括所有的子视图),之后你可以像你说的那样将它保存为文件,或者在你的某个地方使用它应用

public void captureView(int viewId,String filename){
    //Find the view we are after
    View    view = (View) findViewById(viewId);
    //Create a Bitmap with the same dimensions 
    Bitmap image = Bitmap.createBitmap(view.getWidth(), 
                                       view.getHeight(), 
                                       Bitmap.Config.RGB_565);
    //Draw the view inside the Bitmap
    view.draw(new Canvas(image)); 

    //Store to sdcard
    try {
       String path = Environment.getExternalStorageDirectory().toString();
       File myFile = new File(path,filename);
       FileOutputStream out = new FileOutputStream(myFile);

       image.compress(Bitmap.CompressFormat.PNG, 90, out); //Output
    } catch (Exception e) {
       e.printStackTrace();
    }
}

注意避免尝试在onCreate方法上执行此代码,因为您可能在绘制视图之前尝试获取视图的宽度和高度,因此导致错误,因为位图的尺寸为0。

是否按原样或创建视图捕获视图?

我一开始并不是很确定,但经过一些测试后,看起来你所看到的就是你所得到的,所以如果你在发射时有一些旋转或不同于原始配置的东西,它会在捕捉中反映出来。这可能是也可能不是你所追求的,但它是它所提供的。以下是捕获LinearLayout的示例(没有屏幕截图或裁剪,只是直接来自设备)。

view capture