Сохранить макет, который больше, чем экран устройства, в растровое изображение
Мне нужно сохранить содержимое макета на растровое изображение для последующего использования, однако проблема, с которой я сталкиваюсь, заключается в том, что упомянутый макет намного больше экрана устройства.
Просматривая вопросы 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 вашего макета, передавая этот холст. Это нарисует макет на растровое изображение. Конечно, я предполагаю, что у вас достаточно памяти для выделения этого растрового изображения. Если нет, вам не повезло.