6

我可能看过所有关于在 Android 上以编程方式捕获屏幕(屏幕截图、屏幕转储)的 SO 文章,它们通常都得到相同的答案。

它的问题在于它捕获了您指定的视图,但它没有捕获任何可能位于“根视图”之上的对话框。这是我使用的代码,它无法捕获“顶部”的任何内容:

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();
}

问题是: 如何捕获整个屏幕,包括顶部的对话框?我只对捕获我正在编写的应用程序感兴趣,而不是主屏幕或类似的东西,只是在我的根视图之上的任何东西。

我确实读过一些关于生根的文章,但我真的希望对我正在编写的应用程序进行完整的屏幕转储不是不可能的。

4

3 回答 3

3

使用这个库....它对我很有用。 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);
于 2016-12-21T15:08:48.937 回答
1

有可能,您需要将所有视图根绘制到位图。试试这个库:https ://github.com/jraska/Falcon它可以将 Dailogs 捕获到您的屏幕截图中。

于 2015-11-10T18:37:09.633 回答
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)));
于 2014-05-21T15:42:31.490 回答