Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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

Cuando agrego un marcador de un mapa de bits personalizado, el marcador no está centrado en el punto que especifique.

Lo estoy añadiendo así:

  • Carpetas orientables de Android Studio
  • ¿Cómo rotar la línea en Android XML?
  • ¿Cómo configurar la validación en canvas android?
  • ¿Cómo referenciar los atributos de estilo de un drawable?
  • Sugerencias de diseño de material para listas con avatar, texto e icono
  • Cómo agregar una imagen a la carpeta "dibujable" en Android Studio?
  • // 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 obtener los marcadores centrados en sus posiciones?

  • Cambiar el diseño o la actividad de fragmentos (?) Mediante un cajón de navegación
  • ¿Cómo funciona la cancelación de ruido en android?
  • Métodos de carga de datos Android Async
  • ¿Cómo se aplica el permiso de Android?
  • Android Studio 2.0 inicia APK en otro dispositivo
  • Alcanzó el tamaño MAX para la caché de instrucciones compiladas-sql para la base de datos
  • 2 Solutions collect form web for “Marcador de mapa de bits de centrado (Google Maps Android API v2)”

    Simplemente establezca el punto de anclaje para su marcador a 0,5 y 0,5 (medio de su icono).

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

    El valor de ancla predeterminado es (0.5f, 1.0f). Usted puede leer sobre el marcador aquí .

    Si utiliza Marcador , deberá volver a especificar el ancla para centrar su imagen. Como se indica en la documentación: "Ancla: El punto de la imagen que se colocará en la posición LatLng del marcador, por defecto a 50% desde la izquierda de la imagen y en la parte inferior de la imagen".

    Debería considerar utilizar GroundOverlay en lugar de Marker si desea que la imagen se centre por defecto. Véase GroundOverlay , "El ancla es por defecto 50% desde la parte superior de la imagen y 50% desde la izquierda de la imagen."

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.