0

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

我知道我可以使用 a 将TextViews其分层,我已经在这样做了。现在我想知道的是,如何将其导出到图像中?ImageViewFrameLayout

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

先感谢您。

4

1 回答 1

6

可以轻松完成吗?, 是的

如何?

好吧,前几天我碰巧为此做了一个函数,它真的很简单(确保你有写入外部设备的权限)。您所做的就是指定要“绘制”到 a 的视图(它也将包括所有子视图)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捕获的示例(没有屏幕截图或裁剪,只是直接来自设备)。

查看捕获

于 2012-05-17T23:09:26.607 回答