I've built an app that draws text with a boarder onto canvas that is then used as a bitmap and put into a google maps marker.
What I would now like to do is remove the text boarder and create a solid black rectangle background behind the text instead. I've tried a couple of things but can't seem to get anything working on screen.
Code so far:
String text = "testText";
//create bitmap
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmp = Bitmap.createBitmap(300, 100, conf);
//--style text
//text font
Typeface tf = Typeface.create("Helvetica", Typeface.BOLD);
//--set text style, colour, alignment, size
//text
Paint mText = new Paint();
mText.setTextAlign(Align.CENTER);
mText.setColor(Color.WHITE);
mText.setStyle(Paint.Style.FILL);
mText.setTextSize(convertToPixels(context, 12));
mText.setTypeface(tf);
mText.setAntiAlias(true);
//text outline
Paint mTextOutline = new Paint();
mTextOutline.setTextAlign(Align.CENTER);
mTextOutline.setColor(Color.BLACK);
mTextOutline.setStyle(Paint.Style.STROKE);
mTextOutline.setTextSize(convertToPixels(context, 12));
mTextOutline.setTypeface(tf);
mTextOutline.setAntiAlias(true);
mTextOutline.setStrokeWidth(2);
//create and draw text and outline onto canvas
Canvas canvas = new Canvas(bmp);
canvas.drawText(text, 150, 50, mText);
canvas.drawText(text, 150, 50, mTextOutline);
//add text marker to map
textMarker[markerID] = mapView.addMarker(new MarkerOptions()
.title("TEXT_MARKER")
.position(point)
.icon(BitmapDescriptorFactory.fromBitmap(bmp)));
UPDATE:
what I am now trying. Only seems to return a thin black line below the text.
//create bitmap
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmp = Bitmap.createBitmap(300, 100, conf);
//--style text
//text font
Typeface tf = Typeface.create("Helvetica", Typeface.BOLD);
//--set text style, colour, alignment, size
//text
Paint mText = new Paint();
mText.setTextAlign(Align.CENTER);
mText.setColor(Color.WHITE);
mText.setStyle(Paint.Style.FILL);
mText.setTextSize(convertToPixels(context, 12));
mText.setTypeface(tf);
mText.setAntiAlias(true);
//text outline
Paint mTextBackground = new Paint();
mTextBackground.setColor(Color.BLACK);
mTextBackground.setStyle(Style.FILL);
Rect rectangle = new Rect();
mText.getTextBounds(text, 0, text.length(), rectangle);
//create and draw text and outline onto canvas
Canvas canvas = new Canvas(bmp);
canvas.drawRect(rectangle, mTextBackground);
canvas.drawText(text, 150, 50, mText);
//add text marker to map
textMarker[markerID] = mapView.addMarker(new MarkerOptions()
.title("TEXT_MARKER")
.position(point)
.icon(BitmapDescriptorFactory.fromBitmap(bmp)));
Instead of this:
canvas.drawText(text, 150, 50, mTextOutline);
you should draw a Rectagle with one of the drawRect functions from Canvas.
Beware that
mTextOutline.setStyle(Paint.Style.STROKE);
Means only paint the border (stroke), while
mTextOutline.setStyle(Paint.Style.FILL);
Should fill the rectangle.
You can measure the size of the text by using Paint.getTextBounds, and maybe increase it a little so you have some borders.
Of course, paint the border before the text, or you will hide it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With