Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 拍摄常规视图和SurfaceView的复合屏幕视图的屏幕截图_Android_Screenshot_Android View_Surfaceview_Android Mediaprojection - Fatal编程技术网

Android 拍摄常规视图和SurfaceView的复合屏幕视图的屏幕截图

Android 拍摄常规视图和SurfaceView的复合屏幕视图的屏幕截图,android,screenshot,android-view,surfaceview,android-mediaprojection,Android,Screenshot,Android View,Surfaceview,Android Mediaprojection,因此,我有一个摄像头预览(由曲面视图支持),并且有常规的Android UI视图覆盖在预览上。如何拍摄显示屏幕视图的简单屏幕截图 我尝试了MediaProjection,但无法使其工作(我仍在想为什么它不工作)。但我只想将MediaProjection用作最后一个选项,因为它涉及启动新活动。我也读过这个新APIPixelCopy,但不确定它是否适用于合成视图(surafceview和常规视图),但仍然想知道该API是否适用于我 请注意,我试图截图的屏幕时,它基本上是显示两个窗口及其各自的表面合成

因此,我有一个摄像头预览(由曲面视图支持),并且有常规的Android UI视图覆盖在预览上。如何拍摄显示屏幕视图的简单屏幕截图

我尝试了
MediaProjection
,但无法使其工作(我仍在想为什么它不工作)。但我只想将
MediaProjection
用作最后一个选项,因为它涉及启动新活动。我也读过这个新API
PixelCopy
,但不确定它是否适用于合成视图(surafceview和常规视图),但仍然想知道该API是否适用于我

请注意,我试图截图的屏幕时,它基本上是显示两个窗口及其各自的表面合成,以提供最终的显示。任何有此场景示例代码或指针的人都将不胜感激。

这可能会有帮助: 将视图对象传递给函数,它将捕获该特定视图的屏幕截图

public static String captureScreen(View v) {
        Toast.makeText(v.getContext(), "Generating Screenshot. Please wait..", Toast.LENGTH_LONG).show();
        // View v = activity.getWindow().getDecorView().getRootView();
        v.setDrawingCacheEnabled(true);
        Bitmap bmp = Bitmap.createBitmap(v.getDrawingCache());
        v.setDrawingCacheEnabled(false);
        try {
            File dir = new File(Environment.getExternalStorageDirectory() + "/myfolder");
            if (!dir.exists()) {
                dir.mkdirs();
            }
            File file = new File(dir, System.currentTimeMillis() + ".jpg");
            FileOutputStream fos = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.JPEG, 90, fos);
            fos.flush();
            fos.close();
            return file.getAbsolutePath();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

你能试试这个图书馆吗

这个图书馆的主要功能就是这个

private Bitmap getViewBitmap() {
            Bitmap bitmap;
            if (view instanceof TextureView) {
                bitmap = ((TextureView) view).getBitmap();
                Canvas canvas = new Canvas(bitmap);
                view.draw(canvas);
                canvas.setBitmap(null);
                return bitmap;
            } else {
                bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(bitmap);
                view.draw(canvas);
                canvas.setBitmap(null);
                return bitmap;
            }
        }
你查过了吗?