在webview android中截取视频的屏幕截图

时间:2015-07-02 10:49:29

标签: android video webview screenshot

我正在开发一个项目,我在WebView中保存屏幕截图。 API级别为21.在普通主页上,它工作正常,但是当我访问youtube并观看视频时,视频播放器将返回黑色矩形。 我想做的是每当用户触摸屏幕时截取屏幕截图。

当我使用Power& amp;音量按钮完美运行。是否有一个Intent采取这种截图?理想情况下,屏幕截图只包含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处理的,并且对于“普通”快照来说,程序需要计算每一帧太多的工作。

1 个答案:

答案 0 :(得分:0)

我认为这会有所帮助

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

一旦你尝试,请告诉我。

<强>更新

如果我已正确理解您的评论,则无法使用saveWebArchive(filename)更改路径。

然后您可能想要使用saveWebArchive(String,boolean,ValueCallback<String> callBack)。 这将保存具有给定名称的文件,您可以在回调函数中使用该文件名来执行任何操作(例如保存到外部存储或任何其他内容)。

点击此处 - saveWebArchive