Show text on polygon android Google map v2

空扰寡人 提交于 2021-02-06 10:59:24

问题


I am using polygons on map and I want to have a text on them. Is there any possible way to do this? I tried to put simple text on map point but didn't make it.

 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?
        }

回答1:


You can create a Marker with a custom icon, and draw the text on that icon. You can use a method like this:

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 LatLng of the marker and you will have to calculate it from your Region (for example the first point of the geometry, the last point, a random point, the centroid, ...).

Also, take into account that drawing a lot of markers will have a negative effect in the performance.




回答2:


And C#/Xamarin version if anyone needs:

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)));
}


来源:https://stackoverflow.com/questions/30173397/show-text-on-polygon-android-google-map-v2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!