Google Maps Android, detecta la interacción del usuario en un mapa de la ubicación

Tengo una aplicación para Android que muestra un mapa. El mapa se centra por defecto en la posición del usuario tras sus movimientos (el centro se actualiza de acuerdo con las actualizaciones de posición).

Sin embargo, quiero que el usuario pueda utilizar gestos para navegar a tirar el mapa. Cuando el usuario inicia la navegación, quiero que se detenga el "siguiente" y se muestre un botón para que pueda empezar de nuevo.

¿Cómo puedo saber cuando el usuario ha movido el centro del mapa? En GoogleMap.OnCameraChangeListener, no sé si el cambio se debe a una ubicación cambiada oa una interacción del usuario. Tengo un tipo de solución de trabajo utilizando el OnCameraChangeListener, pero es un poco "sucia" y no me parece muy agradable:

map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition position) { // gpsPosition contains the last position obtained if(isFollowing && gpsPosition!=null && (Math.abs(position.target.latitude - gpsPosition.latitude)>0.000001 || Math.abs(position.target.longitude - gpsPosition.longitude)>0.000001) ){ isFollowing = false; map.getUiSettings().setMyLocationButtonEnabled(true); } } }); 

¿Hay una buena solución al problema?

3 Solutions collect form web for “Google Maps Android, detecta la interacción del usuario en un mapa de la ubicación”

Si desea detectar el usuario interactuar con el mapa OnCameraChangeListener es, sin duda, demasiado tarde para hacer eso. Puede ser llamado segundos después de que el usuario comenzó a interactuar con el mapa.

Qué usted necesita hacer, es agregar 2 otros oyentes:

  • OnMyLocationButtonClickListener – para saber cuándo iniciar el seguimiento (defina su isFollowing a true )
  • OnMyLocationChangeListener – cuando su isFollowing es true , llame a GoogleMap.animateCamera a la nueva posición

Así que lo único que queda es cuando se establece isFollowing a false :

Cree una superposición invisible en su diseño ( como aquí , pero con la View normal en lugar de personalizada) y asigne esta superposición (la View ) a OnTouchListener (ok, es la tercera, mentí que sólo necesita 2).

En este oyente siempre devuelve false , pero también establece isFollowing to false . Esto cuando el usuario comienza a interactuar con el mapa y debe detener los movimientos automáticos de la cámara.

También veo que está mostrando y ocultando mi botón de ubicación, así que haga esto donde cambia el valor de isFollowing . Btw .: buena idea para hacer eso. Lo intentaré también.

Nunca he intentado esto, pero aquí hay algunas ideas de la parte superior de mi cabeza (balding):

Si se produce un evento de cambio de cámara que no parece estar vinculado al cambio de ubicación (por ejemplo, 5+ milisegundos después) Que era presumiblemente un usuario que modificaba el mapa a través de gestos.

Opción # 2: Subclase los Mapas V2 MapView y MapView los métodos relacionados con el tacto como onTouchEvent() . Además de encadenar a la superclase, usted sabría que un cambio de cámara que sucede muy pronto a partir de ahora probablemente es del usuario que modifica el mapa vía gestos.

Opción # 3: Hacer ambos de los anteriores. De esta manera, todos los cambios en el mapa deben tocar su código, lo que debería aumentar la fiabilidad de su determinación de la fuente de cambio de la cámara.

BTW, presenté una solicitud de característica para una solución mejor .

La forma más sencilla debería ser guardar el centro Longitud y latitud de su mapa. Ahora crea un EventListener y compruébalo en una sentencia if:

 if(oldLongLat != newLongLat){ //Something has moved }else { //Nothing has moved } 
  • Se muestra Google Maps Android sólo pantalla en blanco
  • Google google mapv2 icono de la URL
  • Instrucciones API en Android
  • Cómo agregar la biblioteca de Google Maps en Android Things?
  • Cómo agregar el logotipo en la pantalla de consentimiento de google?
  • ¿Cómo obtener el certificado de huella digital SHA-1 en Android Studio para el modo de depuración?
  • Cómo guardar agregados google mapas superposiciones en una aplicación para Android?
  • ¿Cómo sé que el mapa está listo para utilizarse cuando se utiliza el SupportMapFragment?
  • Android no puede importar servicios de Google Play
  • Aplicación de Android Studio 0.2 que utiliza Google Maps - Gradle modify
  • Google Maps Android Clustering OnCameraChangeListener () despreciado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.