Cómo obtener coordenadas de pantalla de marcador en google maps v2 android

Tengo un pequeño problema de Android (google maps v2 api)

Este es mi código:

GoogleMaps mMap; Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(20, 20))); 

Estoy tratando de encontrar una manera de obtener las coordenadas de pantalla actuales (x, y) para este objeto marcador.

Tal vez alguien tiene una idea? Intenté getProjection pero no veo trabajar. ¡Gracias! 🙂

Sí, utilice la clase de Projection . Más específicamente:

  1. Obtener la Projection del mapa:

     Projection projection = map.getProjection(); 
  2. Obtenga la ubicación de su marcador:

     LatLng markerLocation = marker.getPosition(); 
  3. Pase la ubicación al método Projection.toScreenLocation() :

     Point screenPosition = projection.toScreenLocation(markerLocation); 

Eso es todo. Ahora screenPosition contendrá la posición del marcador en relación con la esquina superior izquierda del contenedor Map completo 🙂

Editar

Recuerde que el objeto de Projection sólo devolverá valores válidos después de que el mapa haya pasado el proceso de disposición (es decir, tiene un width y una height válidos establecidos). Usted probablemente está recibiendo (0, 0) porque está tratando de acceder a la posición de los marcadores demasiado pronto, como en este escenario:

  1. Cree el mapa desde el archivo XML de presentación inflando
  2. Inicialice el mapa.
  3. Añadir marcadores al mapa.
  4. Consulta Projection del mapa para las posiciones de los marcadores en la pantalla.

Esto no es una buena idea ya que el mapa no tiene un ancho y una altura válidos. Debe esperar hasta que estos valores sean válidos. Una de las soluciones es adjuntar OnGlobalLayoutListener a la vista de mapa y esperar a que el proceso de disposición se asiente. Hágalo después de inflar el diseño e inicializar el mapa – por ejemplo en onCreate() :

 // map is the GoogleMap object // marker is Marker object // ! here, map.getProjection().toScreenLocation(marker.getPosition()) will return (0, 0) // R.id.map is the ID of the MapFragment in the layout XML file View mapView = getSupportFragmentManager().findFragmentById(R.id.map).getView(); if (mapView.getViewTreeObserver().isAlive()) { mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // remove the listener // ! before Jelly Bean: mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this); // ! for Jelly Bean and later: //mapView.getViewTreeObserver().removeOnGlobalLayoutListener(this); // set map viewport // CENTER is LatLng object with the center of the map map.moveCamera(CameraUpdateFactory.newLatLngZoom(CENTER, 15)); // ! you can query Projection object here Point markerScreenPosition = map.getProjection().toScreenLocation(marker.getPosition()); // ! example output in my test code: (356, 483) System.out.println(markerScreenPosition); } }); } 

Por favor, lea los comentarios para obtener información adicional.

  • Animación de tipo GIF para marcador en google map api ANDROID
  • Marcador de google maps definido en XML de presentación
  • Actualizar continuamente el marcador cuando cambia la ubicación en Android
  • Localización en tiempo real del dispositivo android desde otro dispositivo
  • CursorAdapter para la actividad de GoogleMaps
  • Cómo mostrar el marcador de posición actual en el mapa en android?
  • Agregar marcador en la ubicación tocada usando google map en android
  • La vista Google Maps de Google devuelve el error cuando se usa onTap () - Se supone que Alertdialog se muestra
  • Marcador personalizado en google maps en android con vector icono de activo
  • Cómo dibujar el texto en el marcador predeterminado de google map v2
  • Google Maps v2 que centra y que da vuelta a la posición de la cámara para caber dos marcadores
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.