Intereting Posts
Как использовать предварительно скомпилированные файлы заголовков в Android NDK Где посмотреть примеры android.R.layout? Дешевый Android 7-дюймовый планшет (800×480): неправильное соотношение сторон, круги выглядят как многоточие Android: расширенный ColorPickerDialog Как сравнить номера телефонов? Может ли Android-телефон декодировать и воспроизводить * .caf-файл с кодеком iLBC? Сбой при сбое токенов Android Google Cloud Messaging (GCM) после обновления, связанного с Firebase для Google Play Services Комната Android: каждая переменная привязки в запросе должна иметь соответствующий метод Интеграция MySpace, ключ Api Как реализовать голос и видеочат OnSaveInstanceState не вызывается в фрагменте Пользовательский атрибут, импортированный из другого проекта Android Содержимое Tabhost не отображается, когда я обновляю android.support.v4 ListView покажет пустое сообщение до загрузки данных Возможна ли связь между сетями через 3G / 4G для смартфонов?

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); 

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

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