3

I have prepared a custom view. My view contains one alphabet which i have drawn using drawText in onDraw().Now i need to change this view to bitmap.

Here my OnDraw() is,

public void onDraw(Canvas canvas) {

   drawText("A",100,200,mPaint); 
  }

I need to convert this view to bitmap...please help me...thanks in advance .

user884126
  • 185
  • 1
  • 3
  • 10

3 Answers3

5

For those that already have their views set up and want a shorter solution than AutoCoders:

Bitmap result = Bitmap.createBitmap(dst.getWidth(), dst.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(result);
dst.draw(c);

After this the Bitmap 'result' will contain your view.
'dst' is the View you want as a bitmap.

Jave
  • 31,598
  • 14
  • 77
  • 90
4
Bitmap viewCapture = null;

theViewYouWantToCapture.setDrawingCacheEnabled(true);

viewCapture = Bitmap.createBitmap(theViewYouWantToCapture.getDrawingCache());

theViewYouWantToCapture.setDrawingCacheEnabled(false);
Pete Houston
  • 14,931
  • 6
  • 47
  • 60
1

In Android, the word “bitmap”, is a class that help us to work with images as a map of bits or an array of bits. This Bitmap class is very useful when we are working with graphics interfaces like Canvas or OpenGL.

Canvas, is another known class in Java, and is used to draw things. In Canvas we have control of all the pixels.

We need to have some variables initialized,

This is the Canvas we are going to draw in.

Canvas canvas = null

This is the layout we are going to use to create our view.

RelativeLayout relativeView ;

This is the background we are going to set in our view, we get it from a resource file (R.drawable.blackBgrnd). The BitmapFactory.decodeResource method is used to get a resource image and convert it in a Bitmap (we will use the Bitmap class). The object mContext (context) must be passed from the Activity we are working on.

Bitmap viewBgrnd = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.blackBgrnd);

We need another bitmap, to draw it on the canvas. We set the width and the height of this bitmap relative to the width and height we have created in our layout. Now this Bitmap is empty, but we are going to associate it with the canvas, so every time we draw in the canvas, it will be drawn in this bitmap object.

Bitmap returnedBitmap = Bitmap.createBitmap(relativeView .width, relativeView.height,Bitmap.Config.ARGB_8888);

First of all, we had the canvas = null, now we create a Canvas object using the auxiliary bitmap we had created before.

canvas = new Canvas(auxBitmap);

Now its time to create our view.

We can add Images, for example:

ImageView newImage = new ImageView(mContext);

newImage.setImageBitmap(bitmapWithImage)

We can set the imageView position in the view using “layout” method:

newImage.layout(l,t,r,b);

l Left position, relative to parent t Top position, relative to parent r Right position, relative to parent b Bottom position, relative to parent and finally adding it to our layout:

relativeView.addView(newImage);

or we can add text:

TextView newText = new TextView(mContext);

newText.setText(“This is the text that its going to appear”);

adding it to the layout in the same way:

relativeView.addView(newText);

Once we have added all elements we want to our layout, we have to create a paint object:

Paint paint = new Paint();

just to define default values of painting.

We use the “drawBitmap” method from the canvas:

canvas.drawBitmap(ViewBgrnd, 0, 0, paint);

and finally we call dispatchDraw in the layout to draw the children views (imageView, textView) in the canvas.

relativeView.dispatchDraw(canvas);

The returnedBitmap is the bitmap that contains the drawing of the views in the canvas, on it, we have the layout and its childrens as a Bitmap, after painting them in the Canvas.

Conclusion

This is really tricky and maybe difficult to understand. It took me time to understand how it worked. I will try to summarize it:

We need to create a empty bitmap. This bitmap will be the final bitmap with the views on it. We create the canvas using that bitmap. We create a layout and we add as many elements as we want. We attach the layout to the canvas. Because we have created the canvas using a bitmap object, all that is drawn in the canvas, will be drawn in the bitmap.

From: Bright hub

Alexander.Iljushkin
  • 4,519
  • 7
  • 29
  • 46