2015-07-02 50 views
2

我正在一個項目中,我在WebView中保存截圖。 API級別爲21.在普通主頁上,它工作得很好,但是當我訪問YouTube並觀看視頻時,視頻播放器將返回爲黑色矩形。 我想要做的就是當用戶觸摸屏幕時拍攝屏幕截圖。在webview中截取視頻android

當我使用Power & Volume Button進行截圖時,它可以很好地工作。有沒有一種意圖,這需要這種截圖?理想情況下,截圖只包含webview,但如果是整個屏幕,我也可以使用它。

任何幫助,非常感謝。

乾杯,

託比

編輯:我的一些代碼

View rootView; 
ValueCallback<String> callback = new ValueCallback<String>() { 
    @Override 
    public void onReceiveValue(String value) { 
     category1.setText(value); 
    } 
}; 
String root = android.os.Environment.getExternalStoragePublicDirectory 
     (Environment.DIRECTORY_DCIM).toString(), filename, time, puretime, movementType = ""; //movementType is set according to MotionEvent.getAction() 
File myDir = new File(root + "/saved_files/") 

protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 

    rootView = findViewById(android.R.id.content).getRootView(); 
    rootView.setDrawingCacheEnabled(true); 
} 

public class MyView extends View { 
    public MyView(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     calendar = Calendar.getInstance(); 
     time = String.format("%02d:%02d:%02d.%03d", calendar.get(Calendar.HOUR_OF_DAY), 
       calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), 
       calendar.get(Calendar.MILLISECOND)); 
     puretime = String.format("%02d%02d%02d%03d", calendar.get(Calendar.HOUR_OF_DAY), 
       calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), 
       calendar.get(Calendar.MILLISECOND)); 
     if (movementType.equals("down")) { 
      try { 
       filename = puretime + ".xml"; 
       webView.saveWebArchive(myDir+filename, false, callback); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     invalidate(); 
     return true; 
    } 

EDIT2:

明顯的黑色矩形的問題是,元素的視頻被處理gpu和用於「正常」快照以運行該程序將需要計算每個工作量太大的幀。

+0

你解決了嗎? –

+1

不,遺憾的是還沒有。 – tobyUCT

回答

0

我認爲這將有助於

View rootView = findViewById(android.R.id.content).getRootView(); 
    rootView.setDrawingCacheEnabled(true); 
    Bitmap screenshot = rootView.getDrawingCache(); 

讓我知道,一旦你嘗試。

UPDATE:

如果我理解正確的評論,你無法改變與saveWebArchive(filename)路徑。

然後,您可能需要使用saveWebArchive(String,boolean,ValueCallback<String> callBack)。 這將使用給定名稱保存文件,並且您可以在回調函數中使用該文件名來執行任何您想要的操作(如保存到外部存儲或任何其他文件)。

這裏檢查 - saveWebArchive

+0

它不同於嘗試嘗試,但我從來沒有得到我想要的結果。 在最後一次嘗試中,每當我接觸時我都有相同的屏幕截圖(我也在屏幕下半部分的觸摸事件的位置上繪製了一個圓圈)。 WebView應該顯示的截圖部分現在一直是白色的。 另一個問題:我應該在每個截圖之前和之後啓用/禁用drawingCache嗎? – tobyUCT

+0

你可能想嘗試(http://developer.android.com/reference/android/webkit/WebView.html#saveWebArchive(java.lang.String)) 如果緩存被禁用'getDrawingCache()'將返回空值。因此,啓用緩存是一個更安全的選擇。 – Karthik

+0

感謝您的快速回復:)。我想稍後訪問我的PC上的屏幕截圖。如果我理解正確saveWebArchive不允許我這樣做。至少我沒有設法將它保存到我之前保存圖像的文件夾中。 (該路徑是android.os.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)的ToString()+「/ saved_files /圖像/」,然後我加入「filename.jpg」爲圖像(文件名是一天中的時間,在觸地的時刻)爲saveWebArchive我改變了結尾。xml – tobyUCT