【问题标题】:Show text on polygon android Google map v2在多边形 android Google 地图 v2 上显示文本
【发布时间】:2015-07-22 07:05:33
【问题描述】:

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

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

【问题讨论】:

    标签: android google-maps text polygon


    【解决方案1】:

    您可以使用自定义图标创建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 如果此解决方案适合您,请接受此答案,以便其他人也可以使用此方法。
    • @antonio 你能指导我改变文本的背景颜色吗,我想要彩色背景的标签。我该怎么做?
    • @MihodiHasanLushan 你可以试试canvasText.drawColor(Color.RED);
    【解决方案2】:

    如果有人需要,还有 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)));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-13
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多