Question

please help me to draw a text with rounded rectangle as background. I have to draw many texts on a canvas and the text has rounded background. SO what I am trying is to write a function "createTextBitmap" which return a bitmap image so that we can draw image(which return by the function) on a main canvas. the 'createTextBitmap'function can return a created bitmap, the bitmap image is the one,which contains the text with rounded edge background...

i have tried one, which gives below.

 private Bitmap ProcessingBitmap(String text,Paint paint, boolean lastPoint){
    Bitmap bm1 = null;
    Bitmap newBitmap = null;

    Rect bounds = new Rect();
    paint.getTextBounds(text, 0, text.length(), bounds);
    float width = bounds.width();
    float height =bounds.height();
    float radius;
    if (width > height){
        radius = height/4;
    }else{
        radius = width/4;
    }
    Paint paint1 = new Paint();
    paint1.setColor(Color.GREEN);
    paint1.setStrokeWidth(5);   
    paint1.setStyle(Paint.Style.FILL);
    float center_x, center_y;
    center_x = width/4;
    center_y = height/4;
    final RectF rect = new RectF();
    rect.set(center_x - radius, 
            center_y - radius, 
            center_x + radius, 
            center_y + radius);
    Canvas canvas2 = new Canvas();
    canvas2.drawRoundRect(rect, 0, 0, paint);
    canvas2.drawText(text, 0, 0, paint);
    return newBitmap;
     }

and my question is How can we convert this canvas2 to a bitmap image? and image has the size of text bounds, which look likea sample which i need

Was it helpful?

Solution

to convert your canvas into bitmap please do the following :

public Bitmap convertCanvasToBitmap(int width , int height) {
        Bitmap drawnBitmap = null;

        try {
            drawnBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);

            Canvas canvas = new Canvas(drawnBitmap);
// now draw anything you want to the canvas 
        } catch (Exception e) {
            e.printStackTrace();
        }
        return drawnBitmap;
}

so the idea is just pass the bitmap to the canvas , draw with the canvas it will be drawn into your bitmap .

and please refer to this answer here to see how to deal with the text size in the bitmap .

and please give me some feedback

Hope that helps .

OTHER TIPS

you can create a bitmap, then call draw on that bitmap, something like this:

newBitmap = Bitmap.createBitmap(rect.width, rect.height, Bitmap.Config.ARGB_8888);
Canvas canvas2 = new Canvas(newBitmap);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top