Home » Android » android – Get bitmap from layout

android – Get bitmap from layout

Posted by: admin May 14, 2020 Leave a comment

Questions:

I’m trying to inflate a layout and use that to set a bitmap on an image view. Then, I’m adding that imageview to a linear layout and displaying the linear layout. Here’s what I’ve tried:

public class TestActivity extends Activity {
    private static Bitmap bitMap;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout l = new LinearLayout(this);

        bitMap = Bitmap.createBitmap(getWindowManager().getDefaultDisplay().getWidth(), 
                getWindowManager().getDefaultDisplay().getHeight(), 
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitMap);
        LayoutInflater inflater = LayoutInflater.from(this);
        View v1 = inflater.inflate(R.layout.main, null);
        v1.layout(0, 0, getWindowManager().getDefaultDisplay().getWidth(), 
                getWindowManager().getDefaultDisplay().getHeight());
        v1.draw(canvas);

        ImageView i1 = new ImageView(this);
        i1.setImageBitmap(bitMap);
        i1.setAdjustViewBounds(true);
        i1.setLayoutParams(new FrameLayout.LayoutParams(getWindowManager().getDefaultDisplay().getWidth(), 
                getWindowManager().getDefaultDisplay().getHeight()));

        l.addView(i1);
        setContentView(l);
    }
}

Unfortunately, the bitMap is not being created properly. Is there anything I’m doing wrong?

How to&Answers:

Convert a layout to Bitmap.

FrameLayout view = (FrameLayout)findViewById(R.id.framelayout);
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bm = view.getDrawingCache();

Answer:

    /***
 * 
 * @param flameLayout/linearLayout...
 * @param width
 * @param height
 * @return
 */
public static Bitmap viewToBitmap(View view, int width, int height) {
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    view.draw(canvas);
    return bitmap;
}

Answer:

You cant get bitmap on the views or layout is not being inflated.

Layout will only getting inflated after OnCreate()

.

1.Get bitmap on Button_Clicked(View view){}

2.Or using a Handle()to post delaying your get bitmap

3.Make sure drawing cache is created using view.buildDrawingCache();