Reputation: 2748
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)));
Upvotes: 3
Views: 5218
Reputation: 1074
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.
Upvotes: 3