Search code examples
androidandroid-fragmentsscreenshot

Save part of Activity / Fragment as Image


I am trying to save part of my Activity, without Toolbar and Statusbar. The code that i have right now, saves the whole screen. Please refer to the image below.

enter image description here

Code that i have right now:

   llIDCardRootView = (LinearLayout) view.findViewById(R.id.ll_id_card_root_view);
        llIDCardContainer = (LinearLayout) llIDCardRootView.findViewById(R.id.ll_id_card_view);

private void createBitmap() {

        Log.d(Const.DEBUG, "Creating Bitmap");

        Bitmap bmp;
        //View v = llIDCardContainer.getRootView();
        //View v = activity.getWindow().getDecorView().findViewById(android.R.id.content);
        //View v = activity.findViewById(R.id.ll_id_card_root_view);
        ViewGroup v = (ViewGroup) ((ViewGroup) activity
                .findViewById(android.R.id.content)).getChildAt(0);

        v.setDrawingCacheEnabled(true);
//        v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
//                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
//        v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
//        v.buildDrawingCache(true);

        bmp = Bitmap.createBitmap(v.getDrawingCache());

        File directory = new File(Environment.getExternalStorageDirectory()
                + File.separator);
        File file = new File(directory, FILE_NAME);

        try {
            FileOutputStream out = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        v.destroyDrawingCache();
        v.setDrawingCacheEnabled(false);
    }

The image that is being saved..

enter image description here

How can i just save the part that i need from the fragment?


Solution

  • Use function below to save any view to image file. If you need to save in Fragment, call below function in fragment.

    public static Bitmap getBitmapFromView(View view) {
            //Define a bitmap with the same size as the view
            Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
            //Bind a canvas to it
            Canvas canvas = new Canvas(returnedBitmap);
            //Get the view's background
            Drawable bgDrawable =view.getBackground();
            if (bgDrawable!=null) 
                //has background drawable, then draw it on the canvas
                bgDrawable.draw(canvas);
            else 
                //does not have background drawable, then draw white background on the canvas
                canvas.drawColor(Color.WHITE);
            // draw the view on the canvas
            view.draw(canvas);
            //return the bitmap
            return returnedBitmap;
        }