varios trazar studio sgoliver ruta marcadores google geolocalizacion example ejemplos custom agregar android centering google-maps-android-api-2 android-drawable

trazar - google maps android sgoliver



Marcador de mapa de bits centrado(Google Maps Android API v2) (2)

Cuando agrego un marcador de un Bitmap personalizado, el marcador no está centrado en el punto que especifico.

Lo estoy agregando así:

// 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(String.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)); }

Este es el código 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 String 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(String.valueOf(text), bgColor, textColor); } public TextDrawable(final String 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; } }

y aquí está el método 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; }

¿Qué debo agregar a mi código para centrar los marcadores en sus posiciones?


Si usa Marker , deberá volver a especificar el Ancla para centrar su imagen. Como dice la documentación: "Ancla: el punto de la imagen que se colocará en la posición de latencia del marcador. Esto se establece de manera predeterminada en 50% desde la izquierda de la imagen y en la parte inferior de la imagen".

Quizás debas considerar usar GroundOverlay en lugar de Marker si quieres que la imagen se centre por defecto. Vea GroundOverlay , "El ancla está por defecto 50% desde la parte superior de la imagen y 50% desde la izquierda de la imagen".


Simplemente configure el punto de anclaje para su marcador en 0,5 y 0,5 (en la mitad de su icono).

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

El valor de anclaje predeterminado es (0.5f, 1.0f). Puedes leer sobre el marcador aquí .