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 } 
  • ¿Cómo puedo recibir una notificación cuando el usuario presiona el botón Centro en mi ubicación en Google Maps v2 para Android API
  • Cómo implementar google maps búsqueda por dirección en Android?
  • Cómo obtener una clave de versión de Google Maps API v2
  • ¿Cómo abrir la aplicación estándar de Google Map desde mi aplicación?
  • Para mostrar el mapa de Google en el emulador
  • Servicios de Google Play que no funcionan en el emulador de Android API Nivel 11
  • Actualizado una aplicación con v1 mapa en google jugar ahora mostrando azulejos en blanco
  • La superposición de información de tráfico se muestra siempre encima de otras polilíneas en el mapa de google en android
  • ¿Cómo obtener el actual nivel de zoom de GoogleMap?
  • Android: ¿La API de Google Maps sigue siendo gratuita?
  • Cómo utilizar RouteBoxer.js para Google Map en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.