在Android Google地图V2上显示多边形文本

11

我在地图上使用多边形,希望在其上添加文本。有没有可能实现这个功能?我试过在地图点上放置简单文本,但是失败了。

 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?
        }
2个回答

13

您可以创建一个带有自定义图标的Marker,并在该图标上绘制文本。您可以使用以下方法:

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

您需要设置标记的位置LatLng,并且必须从您的Region计算它(例如几何图形的第一个点,最后一个点,随机点,重心等)。

此外,请注意,绘制大量标记将对性能产生负面影响。


谢谢,那真的很有帮助。 - noni_methadoni
1
@noni_methadoni 如果这个解决方案对您有用,请接受此答案,以便其他人也可以使用此方法。 - Mr. Sajid Shaikh
@antonio,你能指导我如何更改文本的背景颜色吗?我想让标签在有色背景下显示。我该怎么做? - Mihodi Lushan
1
@MihodiHasanLushan 你可以尝试执行 canvasText.drawColor(Color.RED); - antonio

0

如果有人需要的话,这是C#/Xamarin版本:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接