Capture the layout and save it as image Code Answer

Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of Capture the layout and save it as image without wasting too much if your time.

The question is published on by Tutorial Guruji team.

I have the following code below, I want to when I click on the button, the “@+id/layout_capture” will be captured and saved as an image .to the gallery with specified name. I’ve tried this but doesn’t work with my code

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">



<LinearLayout
    android:id="@+id/layout_capture"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_gravity="center"
    android:gravity="center_horizontal"
    android:background="#AFA4BF"
    android:padding="10dp"
    >

<ImageView
    android:id="@+id/noaman_1"
    android:layout_width="89dp"
    android:layout_height="89dp"
    android:src="@drawable/ic_launcher_foreground"
    android:background="@drawable/ic_launcher_background"

    />
<!-- First Semister Result -->
<TextView
    android:id="@+id/first_semis1"
    android:layout_width="180dp"
    android:layout_height="24dp"
    android:layout_marginTop="20dp"
    android:text="@string/first_semis"
    android:textAppearance="@style/first_semis"
    android:gravity="center_horizontal|top"
    />
<TextView
    android:id="@+id/first_semis2"
    android:layout_width="180dp"
    android:layout_height="24dp"
    android:text="@string/first_semis"
    android:textAppearance="@style/first_semis"
    android:gravity="center_horizontal|top"
    />

</LinearLayout>
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/first_semis"
     />

   </LinearLayout>

this is the screen content

enter image description here

and this after capture

enter image description here

thanks for your time ❤

Answer

I’ve copied your layout.xml file and simply added the onClick Action to the code:

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/first_semis"
        android:onClick="capture"
        />

I used the code in your link and it does work perfectly:

Here is my MainActivity.java file:

package com.example.androidlayout;

import androidx.appcompat.app.AppCompatActivity;

import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    public void capture(View view){
        Bitmap photo = getBitmapFromView((LinearLayout) findViewById(R.id.layout_capture));
        String savedImageURL = MediaStore.Images.Media.insertImage(
                getContentResolver(),
                photo,
                "your_layout",
                "image"
        );
    }
    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;
    }
}

It saves the image to your gallery.

We are here to answer your question about Capture the layout and save it as image - If you find the proper solution, please don't forgot to share this with your team members.

Related Posts

Tutorial Guruji