我看过可能在Android上以编程方式捕获屏幕的所有SO文章(截图,screendump),他们通常都会得到相同的答案。
它的问题在于它捕获了您指定的视图,但它没有捕获任何可能“在”根视图“之上”的对话框。这是代码我使用,无法捕获任何“在顶部”:
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();
}
问题是: 如何捕获整个屏幕,包括顶部的对话框?我只对捕获我正在编写的应用感兴趣,而不是主屏幕或类似的东西,只是在我的根视图之上的任何东西。
我确实读过一些关于生根的内容,但我真的希望在我写作的应用程序中完整的screendump是不可能的。
答案 0 :(得分:2)
使用这个库....它对我很有用。 https://github.com/jraska/Falcon
// Saving screenshot to file
Falcon.takeScreenshot(this, imageFile);
// Take bitmap and do whatever you want
Bitmap bitmap = Falcon.takeScreenshotBitmap(this);
答案 1 :(得分:0)
这是在打开的DialogFragment内部工作。
View v1 = ((ViewGroup) (((MyActivity)getActivity()).findViewById(android.R.id.content)));
v1.setDrawingCacheEnabled(true);
Bitmap bitmapParent = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
// dialogView is the inflated view of the DialogFragment
dialogView.setDrawingCacheEnabled(true);
Bitmap bitmapDialog = Bitmap.createBitmap(dialogView.getDrawingCache());
dialogView.setDrawingCacheEnabled(false);
Canvas canvas = new Canvas(bitmapParent);
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(bitmapDialog, 0, 0, paint);
// Activity and dialog captured!!
bitmapParent.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(new File(directory, name)));
答案 2 :(得分:0)
有可能,您需要将所有视图根绘制到位图。试试这个库:https://github.com/jraska/Falcon它可以捕获Dailogs到你的截图。