我已经看过可能在Android上以编程方式捕获屏幕(屏幕截图,screendump)的所有SO文章,他们通常都会得到相同的答案.
它的问题在于它捕获了您指定的View,但它不捕获可能"在"根视图"之上"的任何Dialog.这是我使用的代码,无法捕获任何"在顶部":
Bitmap bitmap;
View v1 = findViewById(android.R.id.content);
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
File path = Environment.getExternalStorageDirectory();
File file = new File(path, "myDump.jpg");
FileOutputStream outputStream;
try
{
outputStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 10, outputStream);
outputStream.flush();
outputStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
问题是: 如何捕获整个屏幕,包括顶部的对话框?我只对捕获我正在编写的应用程序感兴趣,而不是主屏幕或类似的东西,只是在我的根视图之上的任何内容.
我确实读过一些关于root的内容,但我真的希望在我写的应用程序的完整screendump是不可能的.
我正在截取如下截图:
public static Bitmap takeScreenshot(Activity activity) {
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top;
int width = activity.getWindowManager().getDefaultDisplay().getWidth();
int height = activity.getWindowManager().getDefaultDisplay().getHeight();
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width,
height - statusBarHeight);
view.destroyDrawingCache();
return bitmap2;
}
Run Code Online (Sandbox Code Playgroud)
但是我的布局中有一个Edittext.我点击它并弹出键盘,但屏幕截图不包含使用这种方式的键盘.如何以编程方式截取屏幕截图?