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:
- Android: cómo volver a cargar marcadores personalizados una vez que la imagen se descarga a través de Picasso?
- ¿Cómo activar el evento onClick de un marcador en un Google Maps V2 para Android?
- Marcador v2 de la API de Google Maps de Google Maps con saltos de anclaje personalizados definidos cuando se arrastra
- Google Maps versión-2 de Google muestra la dirección y el icono de mapa de Google
- Implementar la animación de caída de pines en google maps android
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! 🙂
- Hacer que el marcador se pueda arrastrar tras un solo clic en Android
- Cómo agregar valores en google map v2 marcador android?
- Cómo ajustar el tamaño de los iconos de marcadores según el nivel de zoom en Android
- Android toque en el mapa y obtenga coordenadas
- Cargar imagen en el marcador de mapa con android
- Abrir URL desde Marcador, Android Google Maps V2
- No se puede obtener GoogleMap OnMarkerClickListener para trabajar
- Cómo dibujar el marcador en el centro de la polilínea
Sí, utilice la clase de Projection
. Más específicamente:
-
Obtener la
Projection
del mapa:Projection projection = map.getProjection();
-
Obtenga la ubicación de su marcador:
LatLng markerLocation = marker.getPosition();
-
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:
- Cree el mapa desde el archivo XML de presentación inflando
- Inicialice el mapa.
- Añadir marcadores al mapa.
- 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.
- ¿Cambiar los valores de los pasos en la barra de búsqueda?
- Bitmap.Config.HARDWARE vs Bitmap.Config.RGB_565