Search code examples
androidbitmapandroid-annotations

Generate bitmap from view


When I get the bitmap from the DrawingCache of a view I get no error but I don't see a valid bitmap either. What am I doing wrong?

The code I use to generate the bitmap:

SharePhotoView sharePhotoView = SharePhotoView_.build(this);
sharePhotoView.bind(mCatch);

sharePhotoView.setDrawingCacheEnabled(true);
sharePhotoView.buildDrawingCache();
Bitmap bitmap = sharePhotoView.getDrawingCache();

catchImage.setImageBitmap(bitmap);

The code I use to make the view:

@EViewGroup(R.layout.share_photo)
public class SharePhotoView extends LinearLayout{

    @ViewById
    ImageView catchImage;

    public SharePhotoView(Context context) {
        super(context);
    }

    public void bind(Catch catchItem) {
        Bitmap bitmap = BitmapFactory.decodeFile(catchItem.getImage().getPath());

        catchImage.setImageBitmap(bitmap);

    }
}

Solution

  • Found a method somewhere that did the trick:

    public static Bitmap getScreenViewBitmap(View v) {
        v.setDrawingCacheEnabled(true);
    
        // this is the important code :)
        // Without it the view will have a dimension of 0,0 and the bitmap will be null
        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);
        Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
        v.setDrawingCacheEnabled(false); // clear drawing cache
    
        return b;
    }
    

    Source: http://www.jattcode.com/getting-bitmap-from-a-view-visible-invisible-oncreate/