Android: Si los marcadores se superponen entre sí en el mapa, el evento de clic se disparará para el último escondido

En nuestra aplicación, una gran cantidad de marcadores se dibujan en diferentes lugares y en ciertos casos en un cierto nivel de zoom, los marcadores se superponen entre sí. Así que cuando hago clic en el marcador, espero que el marcador de la parte superior onMarkerClick para ser disparado, sino que se disparó para el último marcador oculto, es decir, el último marcador, sin marcadores detrás de él.

¿Qué sugieres que haga? Además, no tengo ninguna ventana de información , por lo tanto, devuelvo true del método onMarkerClick .

2 Solutions collect form web for “Android: Si los marcadores se superponen entre sí en el mapa, el evento de clic se disparará para el último escondido”

He encontrado la solución aquí: https://github.com/googlemaps/android-maps-utils/issues/26

 mGoogleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { @Override public View getInfoWindow(Marker marker) { // Empty info window. return new View(getApplicationContext()); } @Override public View getInfoContents(Marker marker) { return null; } }); 
  1. Identifique el tamaño de su fabricante en relación a la pantalla en general (por ejemplo, 10%). Defina esto como un flotador llamado IMAGE_SIZE_RATIO

  2. Mantenga los marcadores de la lista a medida que agrega marcadores a su mapa. En su método OnMarkerClickListener onMarkerClick, iterar a través de los otros marcadores y comparar la distancia entre los marcadores en relación con las dimensiones del mapa visible actual y el tamaño del marcador. Como en el código de ejemplo siguiente:

     Flota final estática IMAGE_SIZE_RATIO = .15f;  // define el tamaño de tu marcador en relación con la pantalla total
     Private void setupListeners () {
     GetMap (). SetOnMarkerClickListener (nuevo GoogleMap.OnMarkerClickListener () {
     @Anular
     Public boolean onMarkerClick (Marcador) {
         LatLngBounds b = getMap (). GetProjection (). GetVisibleRegion (). LatLngBounds;
         Distancia del flotador = distancia entre los puntos (b.northeast, b.southwest) * IMAGE_SIZE_RATIO;
         Para (Marker m: makers) {
             If (marker.equals (m)) {continúa;  } // no se compara el mismo
             If (distanceBetweenPoint (m.getPosition (), marker.getPosition ()) {
                 / * Nota hacer onMarkerHaga clic en esto como una tarea de Aynch y continúe 
                 Si también quieren disparar contra el objeto principal.
                 * /
                 Return onMarkerClick (m);
             }
         }
         // Hacer la operación que desea en el marcador real.
     }
     .... (resto del oyente) ...      
     }       
     }
     Protegido Float getDistanceInMeters (LatLng a, LatLng b) {
         Ubicación l1 = nueva ubicación ("");
         Ubicación l2 = new Location ("");
         L1.setLatitud (a.latitud);
         L1.setLongitud (a.longitud);
         L2.setLatitud (b.latitud);
         L2.setLongitud (b.longitud);
         Return l1.distanceTo (l2)
     }
  • Detección de la superposición de pantalla: cómo manejar esto en una aplicación de superposición de pantalla
  • Barra de acción de superposición oscurecida por la barra de estado
  • Emular el botón Atrás con superposición en Android
  • Dibuja rejilla sobre polígono en Google map V2
  • ¿Cómo capturar eventos onTouch en dos vistas superpuestas?
  • Cómo guardar la superposición con vista previa de la cámara en android?
  • Convertir la ubicación en GeoPoint
  • Android Crear imagen "Ghost" (Touch-through)
  • Agrega una superposición transparente mayor para aumentar el área de clic, sin cambiar el diseño.
  • Comportamiento extraño de superposición al ampliar el MapView
  • Cómo crear un diseño de superposición en una vista de lista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.