如何捕获当前屏幕上的所有内容,包括Dialogs

时间:2013-04-18 17:12:05

标签: android screenshot

我看过可能在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是不可能的。

3 个答案:

答案 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到你的截图。