Android получает снимок экрана всех элементов ListView

View v = rootView.findViewById(R.id.layout1); if (v != null) { v.buildDrawingCache(); Bitmap bitmap = v.getDrawingCache(); canvas.drawBitmap(bitmap, dummyMatrix, null); v.destroyDrawingCache(); } 

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

Как правильно захватить мой ListView?

НОВЫЙ КОД РАБОТЫ, СОЗДАННЫЙ ME

 public static Bitmap getWholeListViewItemsToBitmap() { ListView listview = MyActivity.mFocusedListView; ListAdapter adapter = listview.getAdapter(); int itemscount = adapter.getCount(); int allitemsheight = 0; List<Bitmap> bmps = new ArrayList<Bitmap>(); for (int i = 0; i < itemscount; i++) { View childView = adapter.getView(i, null, listview); childView.measure(MeasureSpec.makeMeasureSpec(listview.getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight()); childView.setDrawingCacheEnabled(true); childView.buildDrawingCache(); bmps.add(childView.getDrawingCache()); allitemsheight+=childView.getMeasuredHeight(); } Bitmap bigbitmap = Bitmap.createBitmap(listview.getMeasuredWidth(), allitemsheight, Bitmap.Config.ARGB_8888); Canvas bigcanvas = new Canvas(bigbitmap); Paint paint = new Paint(); int iHeight = 0; for (int i = 0; i < bmps.size(); i++) { Bitmap bmp = bmps.get(i); bigcanvas.drawBitmap(bmp, 0, iHeight, paint); iHeight+=bmp.getHeight(); bmp.recycle(); bmp=null; } return bigbitmap; } 

Рабочий код:

 public static Bitmap getWholeListViewItemsToBitmap() { ListView listview = MyActivity.mFocusedListView; ListAdapter adapter = listview.getAdapter(); int itemscount = adapter.getCount(); int allitemsheight = 0; List<Bitmap> bmps = new ArrayList<Bitmap>(); for (int i = 0; i < itemscount; i++) { View childView = adapter.getView(i, null, listview); childView.measure(MeasureSpec.makeMeasureSpec(listview.getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight()); childView.setDrawingCacheEnabled(true); childView.buildDrawingCache(); bmps.add(childView.getDrawingCache()); allitemsheight+=childView.getMeasuredHeight(); } Bitmap bigbitmap = Bitmap.createBitmap(listview.getMeasuredWidth(), allitemsheight, Bitmap.Config.ARGB_8888); Canvas bigcanvas = new Canvas(bigbitmap); Paint paint = new Paint(); int iHeight = 0; for (int i = 0; i < bmps.size(); i++) { Bitmap bmp = bmps.get(i); bigcanvas.drawBitmap(bmp, 0, iHeight, paint); iHeight+=bmp.getHeight(); bmp.recycle(); bmp=null; } return bigbitmap; } 

В то время как невозможно сделать снимок экрана с не-показуемым контентом (например, внеэкранные элементы ListView), вы можете сделать несколько скриншотов, прокручивать контент между каждым снимком, а затем присоединяться к изображениям. Вот инструмент, который может автоматизировать это для вас: https://github.com/PGSSoft/scrollscreenshot

иллюстрация

Отказ от ответственности: я автор этого инструмента, он был опубликован моим работодателем . Запросы функций приветствуются.

Используйте эту функцию для получения растрового изображения вашего списка

 public Bitmap getBitmapFromView(View view) { Bitmap returnedBitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight() , 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; } 

Используйте это как

 Bitmap b = getBitmapFromView(your listview object here); 

И использовать это растровое изображение, как вы хотите

Надеюсь помочь ..