2015-05-11 15 views
7

Sto usando i poligoni sulla mappa e voglio avere un testo su di essi. C'è qualche modo per farlo? Ho provato a mettere un semplice testo sul punto della mappa ma non ce l'ho fatta.Mostra testo su poligono Android Google map v2

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

risposta

5

È possibile creare un Marker con un'icona personalizzata, e disegnare il testo su quell'icona. È possibile utilizzare un metodo come questo:

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

Sarà necessario impostare la posizione LatLng del marcatore e si dovrà calcolare dal vostro Region (ad esempio, il primo punto della geometria, l'ultimo punto, un punto casuale, il centroide, ...).

Inoltre, tenere presente che il disegno di molti marcatori avrà un effetto negativo sulla prestazione.

+0

Grazie che è stato davvero utile. –

+0

Prego. Felice di aiutare! – antonio

+1

@noni_methadoni se questa soluzione ha funzionato per te allora ti preghiamo di accettare questa risposta in modo che anche altre persone possano utilizzare questo metodo. –

0

e C# versione/Xamarin se qualcuno ha bisogno:

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