Создание снимка экрана составного вида экрана обычного View и SurfaceView

Итак, у меня есть предварительный просмотр камеры (подкрепленный видом поверхности) и обычные представления пользовательского интерфейса Android, накладываемые на предварительный просмотр. Как сделать простой скриншот отображаемого экрана.

Я пробовал с MediaProjection и не смог заставить его работать (я все еще выясняю, почему он не работает). Но я хотел бы использовать MediaProjection только как последний вариант, так как он включает запуск новой активности. Я также читал об этом новом API PixelCopy, но не уверен, будет ли он работать для составного представления (surafceview и обычных представлений), но все же хочу выяснить, будет ли этот API работать для меня.

Обратите внимание, что я пытаюсь сделать снимок экрана, когда он в основном показывает 2 окна и их соответствующие поверхности, компонующиеся для обеспечения окончательного отображения. Буду признателен всем, у кого есть пример кода для этого сценария или какой-либо указатель.


person Dibzmania    schedule 10.01.2019    source источник
comment
Вы проверили stackoverflow.com/questions/27817577/?   -  person Marzi Heidari    schedule 17.01.2019


Ответы (2)


Это может быть полезно: передайте объект представления функции, и она сделает снимок экрана этого конкретного представления.

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;
    }
person Roshan Rijal    schedule 17.01.2019

можешь попробовать эту библиотеку

https://github.com/Muddz/PixelShot

Это основная функция библиотеки.

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;
            }
        }
person nkalra0123    schedule 17.01.2019