Как преобразовать весь контент в scrollview в растровое изображение?

Я использую ниже код для преобразования, но, похоже, он может получать контент только на экране дисплея и не может получить контент не на экране дисплея.

Есть ли способ получить весь контент даже из прокрутки?

Bitmap viewBitmap = Bitmap.createBitmap(mScrollView.getWidth(),mScrollView.getHeight(),Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(viewBitmap); mScrollView.draw(canvas); 

Solutions Collecting From Web of "Как преобразовать весь контент в scrollview в растровое изображение?"

Мы можем преобразовать все содержимое scrollView в растровое изображение, используя приведенный ниже код

 private void takeScreenShot() { View u = ((Activity) mContext).findViewById(R.id.scroll); HorizontalScrollView z = (HorizontalScrollView) ((Activity) mContext).findViewById(R.id.scroll); int totalHeight = z.getChildAt(0).getHeight(); int totalWidth = z.getChildAt(0).getWidth(); Bitmap b = getBitmapFromView(u,totalHeight,totalWidth); //Save bitmap String extr = Environment.getExternalStorageDirectory()+"/Folder/"; String fileName = "report.jpg"; File myPath = new File(extr, fileName); FileOutputStream fos = null; try { fos = new FileOutputStream(myPath); b.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); MediaStore.Images.Media.insertImage(mContext.getContentResolver(), b, "Screen", "screen"); }catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Bitmap getBitmapFromView(View view, int totalHeight, int totalWidth) { Bitmap returnedBitmap = Bitmap.createBitmap(totalWidth,totalHeight , Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(returnedBitmap); Drawable bgDrawable = view.getBackground(); if (bgDrawable != null) bgDrawable.draw(canvas); else canvas.drawColor(Color.WHITE); view.draw(canvas); return returnedBitmap; } 

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

Поэтому я сделал небольшую оптимизацию, чтобы быть аккуратно с памятью 🙂

 public static Bitmap getBitmapFromView(View view, int totalHeight, int totalWidth) { int height = Math.min(MAX_HEIGHT, totalHeight); float percent = height / (float)totalHeight; Bitmap canvasBitmap = Bitmap.createBitmap((int)(totalWidth*percent),(int)(totalHeight*percent), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(canvasBitmap); Drawable bgDrawable = view.getBackground(); if (bgDrawable != null) bgDrawable.draw(canvas); else canvas.drawColor(Color.WHITE); canvas.save(); canvas.scale(percent, percent); view.draw(canvas); canvas.restore(); return canvasBitmap; } 

Вам нужно получить общую ширину и высоту прокрутки, или созданный viewBitmap слишком мал, чтобы содержать полный контент scrollview.

Проверьте эту ссылку Android: общая высота ScrollView

Проблема здесь в том, что единственным фактическим содержимым пикселей, которое когда-либо существует, является то, что видно на экране дисплея. Android и другие мобильные платформы очень осторожны в использовании памяти, и один из способов, с помощью которого прокрутка может поддерживать производительность, – это не рисовать ничего, что вне экрана. Таким образом, нигде нет «полного» растрового изображения – память, содержащая контент, который перемещается за кадром, перерабатывается.