Сохранить макет, который больше, чем экран устройства, в растровое изображение

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

Просматривая вопросы stackru, я пришел к следующему коду:

private void viewToBitmap(View view) {

    view.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
    view.setDrawingCacheEnabled(false);

    String mPath = Environment.getExternalStorageDirectory().toString() + "/" + name + ".jpg";
    File imageFile = new File(mPath);

    FileOutputStream outputStream = new FileOutputStream(imageFile);
    int quality = 100;
    bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
    outputStream.flush();
    outputStream.close();
}

Он работает как предназначено для макетов, которые имеют тот же размер или меньше, чем экран устройства, но когда я пытаюсь преобразовать макет, который мне нужен, я получаю следующую ошибку:

LinearLayout не отображается, поскольку он слишком велик, чтобы поместиться в программный слой (или кэш чертежа), требует 9334080 байт, доступно только 3686400

Возможно ли это вообще вообще, или мне придется проявить творческий подход и сделать что-то вроде использования нескольких макетов, которые помещаются на экран и сохраняются в нескольких растровых изображениях отдельно?

1 ответ

Создайте растровое изображение. Создайте холст, который рисует к нему. Вызовите onDraw вашего макета, передавая этот холст. Это нарисует макет на растровое изображение. Конечно, я предполагаю, что у вас достаточно памяти для выделения этого растрового изображения. Если нет, вам не повезло.

Другие вопросы по тегам