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