在多边形android谷歌地图v2上显示文本

时间:2015-05-11 16:55:19

标签: android google-maps text polygon

我在地图上使用多边形,我希望在它们上面有文字。有没有办法做到这一点?  我试图在地图上放置简单的文字,但没有成功。

 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 个答案:

答案 0 :(得分:7)

您可以使用自定义图标创建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,您必须从<?xml version="1.0" encoding="utf-8" standalone="no"?> <root> <View> <File> <Name>somefile_name</Name> </File> </View> <View> <Directory> <Name>somedirectory_name</Name> </Directory> </View> <View> <Pipe> <Name>somepipe_name</Name> </Pipe> </View> </root> 计算它(例如几何的第一个点,最后一个点,一个随机点,质心,...)。

另外,考虑到绘制大量标记会对性能产生负面影响。

答案 1 :(得分: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)));
}