Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to draw text with background color using canvas

Tags:

android

I have some code where I'm drawing my text on bitmap (canvas)

canvas.drawTextOnPath(Text, textPath[count], gipa, -10, text);

Please tell me, it's possible to draw this text in path(textPath) with background color?

it's full function for drawing only text

 public void drawText(float x,float y ,String Text,Canvas canvas,Paint paint1 ,int count )
        {
            float xren =text.measureText(Text.trim());

            canvas.drawTextOnPath(Text, textPath[count], gipa, -10, text);

        }

Using this function I'm drawing text on my canvas. so how to modify this function for drawing this text with background?

like image 558
Peter Avatar asked Nov 23 '11 12:11

Peter


People also ask

How to draw text with background color using canvas in android?

Most likely two steps are needed here. you would draw a line along path first with color for background and then draw the text as indicated. Set the thickness of the line with a paint object. Also, changing the style of the paint can help with the effect.


2 Answers

Most likely two steps are needed here. you would draw a line along path first with color for background and then draw the text as indicated. Set the thickness of the line with a paint object. Also, changing the style of the paint can help with the effect. try FILL, STROKE or FILL_AND_STROKE for different effects.

mpaint.setStyle(Paint.Style.STROKE);
mpaint.setStrokeWidth(strokeWidth);

Added sample to draw a path(rectangle) with red color:

         Paint mPaint = new Paint();
         mPaint.setColor(Color.RED);
         Path mPath = new Path();
         RectF mRectF = new RectF(20, 20, 240, 240);
         mPath.addRect(mRectF, Path.Direction.CCW);
         mPaint.setStrokeWidth(20);
         mPaint.setStyle(Paint.Style.STROKE);
         canvas.drawPath(mPath, mPaint);

Then draw text along same path (blue color):

        mPaint.setColor(Color.BLUE);
         mPaint.setStrokeWidth(0);
         mPaint.setStyle(Paint.Style.FILL);
         mPaint.setTextSize(20);
         canvas.drawTextOnPath("Draw the text, with origin at (x,y), using the specified paint, along the specified path.", mPath, 0, 5, mPaint);

results

like image 118
eyespyus Avatar answered Oct 07 '22 00:10

eyespyus


If you want to make like this then implement below code snippet:

enter image description here

     /**
     * PUT THIS METHOD FOR IMPLEMENT WATER-MARK IN COMMON FILE
     */
    public static Bitmap waterMark(Bitmap src, String watermark) {
        //get source image width and height
        int w = src.getWidth();
        int h = src.getHeight();

        Bitmap result = Bitmap.createBitmap(w, h, src.getConfig());
        Canvas canvas = new Canvas(result);
        canvas.drawBitmap(src, 0, 0, null);
        Paint paint = new Paint();
        Paint.FontMetrics fm = new Paint.FontMetrics();
        paint.setColor(Color.WHITE);
        paint.getFontMetrics(fm);
        int margin = 5;
        canvas.drawRect(50 - margin, 50 + fm.top - margin,
                50 + paint.measureText(watermark) + margin, 50 + fm.bottom
                        + margin, paint);

        paint.setColor(Color.RED);

        canvas.drawText(watermark, 50, 50, paint);
        return result;
    }

// To Get Bitmap from URI:

  private Bitmap getBitmapFromUri(String photoPath) {
        Bitmap image = null;
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        Bitmap bitmap = BitmapFactory.decodeFile(photoPath, options);
        return bitmap;
    }

// Save Image :

 private String SaveImage(Bitmap finalBitmap) {

        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/shareImage");
        myDir.mkdirs();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image" + n + ".jpg";

        File file = new File(myDir, fname);
        if (file.exists()) file.delete();
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG, 20, out);
            out.flush();
            out.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return file.getAbsolutePath();
    }

// Call like this :

                Bitmap bitmap = getBitmapFromUri(attachment.get(i).getPath()); // Enter here your Image path

                Bitmap bitmapp = waterMark(bitmap, "ENTER YOUR TEXT FOR WATERMARK LABEL");

                String path = SaveImage(bitmapp);
                Uri uri = Uri.fromFile(new File(path));

Here at last from uri you can get a new implemented watermark image.

Hope this helps you.

like image 33
InsaneCat Avatar answered Oct 07 '22 01:10

InsaneCat