Centrage du marqueur bitmap (Google Maps Android API v2)

Lorsque j’ajoute un marqueur à partir d’un bitmap personnalisé, le marqueur n’est pas centré au point que je spécifie.

Je l’ajoute comme ceci:

// ID tramo final int tramoId = tr.getId(); // Nodos final Nodo[] nodos = tr.getNodos(); final PolylineOptions p = new PolylineOptions(); MarkerOptions m = new MarkerOptions(); // Seteamos posicion de linea y marker m.position(semisuma(nodos)); for (final Nodo n : nodos) { p.add(n.getLatLng()); } // Color de linea y marker BitmapDescriptor icon = null; if (tr.getCapacidad() == 0) { p.color(0xFF000000); m = null; } else if (tr.getCapacidad() - tr.getPlazasOcupadas() == 0) { p.color(0xEEFF0000); final TextDrawable drawable = new TextDrawable(0, 0xEEFF0000, 0xFFFFFFFF); icon = BitmapDescriptorFactory.fromBitmap(fromDrawable(drawable)); } else { p.color(0xEE00FFFF); final TextDrawable drawable = new TextDrawable(0, 0xEE00FFFF, 0xFFFFFFFF); icon = BitmapDescriptorFactory.fromBitmap(fromDrawable(drawable)); } if (m != null) { m.title(Ssortingng.valueOf(tramoId)); m.icon(icon); } if (polylinesTramo.get(idTramo) != null) { polylinesTramo.get(idTramo).remove(); } if (markersTramo.get(idTramo) != null) { markersTramo.get(idTramo).remove(); } polylinesTramo.put(idTramo, map.getMap().addPolyline(p)); if (marker != null) { markersTramo.put(idTramo, map.getMap().addMarker(m)); } 

Ceci est le code de TextDrawable:

 package com.cidaut.blueparking.ui; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.drawable.Drawable; public class TextDrawable extends Drawable { private final Ssortingng text; private final Paint paint; private final int centroX = 13; private final int centroY = 16; private final float textSize; private final float whereToDrawX; private final int bgColor; public TextDrawable(final int text, final int bgColor, final int textColor) { this(Ssortingng.valueOf(text), bgColor, textColor); } public TextDrawable(final Ssortingng text, final int bgColor, final int textColor) { this.text = text; this.bgColor = bgColor; this.paint = new Paint(); paint.setColor(textColor); paint.setTextSize(14f); paint.setAntiAlias(true); paint.setFakeBoldText(true); paint.setStyle(Paint.Style.FILL); paint.setTextAlign(Paint.Align.LEFT); textSize = paint.measureText(text); whereToDrawX = centroX - (textSize / 2); } @Override public void draw(final Canvas canvas) { canvas.drawColor(bgColor); canvas.drawText(text, whereToDrawX, centroY, paint); } @Override public void setAlpha(final int alpha) { paint.setAlpha(alpha); } @Override public void setColorFilter(final ColorFilter cf) { paint.setColorFilter(cf); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } } 

et voici la méthode fromDrawable

 protected Bitmap fromDrawable(final Drawable drawable) { final Bitmap bitmap = Bitmap.createBitmap(25, 25, Config.ARGB_8888); final Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } 

Que dois-je append à mon code pour que les marqueurs soient centrés dans leurs positions?

Il suffit de définir le point d’ancrage pour votre marqueur à 0.5 et 0.5 (milieu de votre icône).

 ... MarkerOptions m = new MarkerOptions(); m.anchor(0.5f, 0.5f); ... 

La valeur d’ancrage par défaut est (0.5f, 1.0f). Vous pouvez lire sur le marqueur ici .

Si vous utilisez le marqueur, vous devez spécifier l’ancre afin de centrer votre image. Comme le dit la documentation: “Ancrage: le point sur l’image qui sera placé à la position LatLng du marqueur. Par défaut, 50% à partir de la gauche de l’image et au bas de l’image.”.

Vous devriez peut-être envisager d’utiliser GroundOverlay au lieu de Marker si vous souhaitez que l’image soit centrée par défaut. Voir GroundOverlay , “L’ancre est par défaut 50% du haut de l’image et 50% de la gauche de l’image.”