10

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?

OckhamsRazor
  • 4,824
  • 13
  • 51
  • 88
  • 1
    uh, i don't know how much clearer i can get, considering ive put up all my code here. all i want is to inflate a layout, get a view from it, and use it to get a bitmap. however, my solution is not working. so how do i make this work? – OckhamsRazor Nov 14 '11 at 10:30

3 Answers3

28

Convert a layout to Bitmap.

FrameLayout view = (FrameLayout)findViewById(R.id.framelayout);
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bm = view.getDrawingCache();
RajaReddy PolamReddy
  • 22,428
  • 19
  • 115
  • 166
3
    /***
 * 
 * @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;
}
baotiit
  • 31
  • 3
  • 1
    Perhaps give a bit of an explanation as to what your code is doing and why you chose do do it like that. – JamesENL May 22 '14 at 04:26
2

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();

nyconing
  • 1,092
  • 1
  • 10
  • 33