Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 929
Vamsi Challa Avatar asked Sep 25 '15 09:09

Vamsi Challa


2 Answers

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;
    }
like image 65
Kingfisher Phuoc Avatar answered Oct 08 '22 04:10

Kingfisher Phuoc


Use this

container_layout.setDrawingCacheEnabled(true);
container_layout.buildDrawingCache(true);
Bitmap saveBm = Bitmap.createBitmap(container_layout.getDrawingCache());
container_layout.setDrawingCacheEnabled(false);

You can now save the saveBm as file

like image 35
NaviRamyle Avatar answered Oct 08 '22 04:10

NaviRamyle