2014-02-27 16 views
1

我正在試圖獲取應用程序屏幕上顯示的所有內容的位圖。我目前檢索視圖及其截圖下列要求:如何截取Activity的內容,包括PopupWindows和AlertDialogs?

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

得到的屏幕截圖顯示我想要的東西,除非PopupWindowAlertDialog當前處於打開狀態。它們似乎不在根視圖下的視圖層次結構內。我可以使用其他視圖來捕獲屏幕上的所有內容嗎?我對捕獲應用程序之外的任何內容不感興趣,例如通知欄。

回答

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

我可以在一個活動中訪問任何PopupWindows和AlertDialogs而不用創建它們嗎?我正在製作一個截取屏幕截圖的庫,所以我不知道PopupWindow或AlertDialog是否會出現。 – BVB

+1

使用戶通過popupwindow或alertdialog的實例,然後調用任何.isShowing()並從那裏處理它 – rperryng

+0

我擔心這將是唯一的解決方案。想盡可能簡單地使用它。謝謝(你的)信息!你能把這個添加到你的答案嗎?我會接受它。 – BVB

0

我想如果你想捕捉所有你將不得不使用ddms工具拍攝屏幕截圖,然後裁剪出你不想要的任何東西,比如通知欄。

+0

我知道我可以這樣做,但我想在我的應用程序中以編程方式處理屏幕截圖。 – BVB

相關問題