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

1

すべてのビュー ルートをビットマップに描画する必要がある可能性があります。このライブラリを試してみてください: https://github.com/jraska/Falconスクリーンショットにダイログをキャプチャできます。

于 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 に答える