如何截取Activity的内容,包括PopupWindows和AlertDialogs?

时间:2014-02-27 20:31:39

标签: android android-layout android-view

我正在尝试获取应用程序屏幕上显示的所有内容的位图。我目前正在使用以下内容检索视图及其屏幕截图:

View viewToCapture = activity.getWindow().getDecorView().getRootView();
... // some code here for enabling drawing cache if necessary, etc
Bitmap screenshot = viewToCapture.getDrawingCache();

生成的屏幕截图显示了我想要的内容,除非PopupWindowAlertDialog当前处于打开状态。它们似乎不在根视图下的视图层次结构中。是否有一个替代视图,我可以使用它来捕获屏幕上的所有内容?我不想捕获应用程序之外的任何内容,例如通知栏。

2 个答案:

答案 0 :(得分:1)

尝试制作活动窗口的位图和对话框窗口的位图,然后使用画布将图像叠加在一起。

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) {
    try {
         Bitmap bmOverlay = Bitmap.createBitmap(width, height,  bmp1.getConfig());
         Canvas canvas = new Canvas(bmOverlay);
         canvas.drawBitmap(bmp1, 0, 0, null);
         canvas.drawBitmap(bmp2, 0, 0, null);
         return bmOverlay;

 } catch (Exception e) { e.printStackTrace() }

答案 1 :(得分:0)

我认为如果您想要捕获所有内容,您必须使用ddms工具拍摄屏幕截图,然后裁剪出您不想要的任何内容,例如通知栏。