Hello All:
Sometimes in our application we need to save layout containing ListView as image so that it can be shared or saved somewhere.
In this post I will share the code which saves a ListView with Header view as bitmap.
Following helper method can be used to save listview to an image.
Hope this helps. Happy coding :)
Sometimes in our application we need to save layout containing ListView as image so that it can be shared or saved somewhere.
In this post I will share the code which saves a ListView with Header view as bitmap.
Following helper method can be used to save listview to an image.
public static <T extends BaseAdapter> String getBitmapPath(ListView view, T adapter) { try { view.setDrawingCacheEnabled(true); view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(true); List<Bitmap> bitmaps = new ArrayList<Bitmap>(); int count = adapter.getCount(); bitmaps.add(view.getDrawingCache()); int fullHeight = view.getHeight(); for (int index = 0; index < count; index++) { View childView = adapter.getView(index, null, view); childView.measure(View.MeasureSpec.makeMeasureSpec(view.getWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight()); childView.setDrawingCacheEnabled(true); childView.buildDrawingCache(true); bitmaps.add(childView.getDrawingCache()); fullHeight += childView.getMeasuredHeight(); } Bitmap bitmapToSave = Bitmap.createBitmap(view.getWidth(), fullHeight, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmapToSave); canvas.drawColor(Color.WHITE); Paint paint = new Paint(); int height = 0; for (Bitmap bitmap : bitmaps) { canvas.drawBitmap(bitmap, 0, height, paint); height += bitmap.getHeight(); bitmap.recycle(); } ///To support older devices for (int index = 0; index < count; index++) { View childView = adapter.getView(index, null, view); childView.setDrawingCacheEnabled(false); } bitmaps.clear(); File file, outputFile; file = new File(android.os.Environment.getExternalStorageDirectory(), "cacheFolder"); if (!file.exists()) { file.mkdirs(); } String path = file.getAbsolutePath() + File.separator + "listview" + ".png"; outputFile = new File(path); FileOutputStream outputStream = new FileOutputStream(outputFile); bitmapToSave.compress(Bitmap.CompressFormat.PNG, 90, outputStream); outputStream.close(); view.setDrawingCacheEnabled(false); return path; } catch (Exception e) { e.printStackTrace(); } return ""; }This helper method can be used save listview as an image.
Hope this helps. Happy coding :)
Thanks for printing this post. Hope you liked it.
Keep visiting and sharing.
Thanks,
Ashwani.
Keep visiting and sharing.
Thanks,
Ashwani.
0 comments :
Post a Comment