Cómo obtener las coordenadas de la pantalla del 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 forma de obtener las coordenadas de pantalla actuales (x, y) para este objeto marcador.

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

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

  1. Obtener Projection del mapa:

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

     LatLng markerLocation = marker.getPosition(); 
  3. Pasar 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 de todo el contenedor del mapa 🙂

Editar

Recuerde que el objeto Projection solo devolverá valores válidos una vez que el mapa haya pasado el proceso de disposición (es decir, que tenga un width y height válidos establecidos). Probablemente esté obteniendo (0, 0) porque está intentando acceder a la posición de los marcadores demasiado pronto, como en este caso:

  1. Cree el mapa a partir del archivo XML de diseño inflándolo
  2. Inicializa el mapa.
  3. Agrega marcadores al mapa.
  4. Consulta Projection del mapa para posiciones de marcador en la pantalla.

Esta no es una buena idea ya que el mapa no tiene un ancho y altura válidos establecidos. Debe esperar hasta que estos valores sean válidos. Una de las soluciones es OnGlobalLayoutListener un OnGlobalLayoutListener a la vista de mapa y esperar a que se establezca el proceso de diseño. 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.