Show text on the Android test site Google map v2

I use polygons on the map, and I want to have text on them. Is there any way to do this? I tried to put plain text at the point of the map, but did not.

private void addPolygon(Region reg) { PolylineOptions polylineOptions = new PolylineOptions(); ArrayList<LatLng> coordList=reg.getAllPoints(); coordList.add(coordList.get(0)); int regColor = reg.getColor(); String regName = reg.getName(); //want to put a name on region polylineOptions.addAll(coordList); polylineOptions .width(5) .color(Color.BLACK); if (regColor != 0) polylineOptions .color(regColor); map.addPolyline(polylineOptions); //text on shape? } 
+7
android text polygon google-maps
source share
2 answers

You can create a Marker using a custom icon and draw text on that icon. You can use this method:

 public Marker addText(final Context context, final GoogleMap map, final LatLng location, final String text, final int padding, final int fontSize) { Marker marker = null; if (context == null || map == null || location == null || text == null || fontSize <= 0) { return marker; } final TextView textView = new TextView(context); textView.setText(text); textView.setTextSize(fontSize); final Paint paintText = textView.getPaint(); final Rect boundsText = new Rect(); paintText.getTextBounds(text, 0, textView.length(), boundsText); paintText.setTextAlign(Align.CENTER); final Bitmap.Config conf = Bitmap.Config.ARGB_8888; final Bitmap bmpText = Bitmap.createBitmap(boundsText.width() + 2 * padding, boundsText.height() + 2 * padding, conf); final Canvas canvasText = new Canvas(bmpText); paintText.setColor(Color.BLACK); canvasText.drawText(text, canvasText.getWidth() / 2, canvasText.getHeight() - padding - boundsText.bottom, paintText); final MarkerOptions markerOptions = new MarkerOptions() .position(location) .icon(BitmapDescriptorFactory.fromBitmap(bmpText)) .anchor(0.5f, 1); marker = map.addMarker(markerOptions); return marker; } 

You will need to set the location of the LatLng marker, and you will need to calculate it from your Region (e.g., first geometry point, last point, random point, centroid, ...).

Also, keep in mind that drawing a large number of markers will have a negative effect on performance.

+5
source share

And the C # / Xamarin version if someone needs to:

 public Marker AddText(Context context, GoogleMap map, LatLng location, string text, int fontSize) { if (text == null) throw new ArgumentNullException(nameof(text)); if (location == null) throw new ArgumentNullException(nameof(location)); if (map == null) throw new ArgumentNullException(nameof(map)); if (context == null) throw new ArgumentNullException(nameof(context)); if (fontSize <= 0) throw new ArgumentOutOfRangeException(nameof(fontSize)); var textView = new TextView(context); textView.Text = text; textView.TextSize = fontSize; var paintText = textView.Paint; var boundsText = new Rect(); paintText.GetTextBounds(text, 0, textView.Length(), boundsText); paintText.TextAlign = Paint.Align.Center; paintText.Color = Android.Graphics.Color.Black; var bmpText = Bitmap.CreateBitmap(boundsText.Width(), boundsText.Height(), Bitmap.Config.Argb8888); var canvasText = new Canvas(bmpText); canvasText.DrawText(text, canvasText.Width / 2, canvasText.Height - boundsText.Bottom, paintText); return map.AddMarker((new MarkerOptions().SetPosition(location).SetIcon(BitmapDescriptorFactory.FromBitmap(bmpText)).Anchor(0.5f, 1))); } 
0
source share

All Articles