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.
- Hacer algo cuando estoy dentro del radio del círculo
- ¿Cómo obtener latitud y longitud de la dirección en Android?
- MapView en ExpandableListView
- Mostrar la ubicación actual y los lugares cercanos y la ruta entre dos lugares con la API de Google Maps en Android
- Definición de un CameraUpdate con LatLngBounds con diferentes valores de relleno
¿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?
- Google Maps V2 Android funciona como fragmento, pero muestra pantalla en blanco (con control de zoom) como fragmento de niño
- Android 2.3 Google Maps Falta el recurso maps_watermark_dark.png
- GoogleMap CameraUpdate se mueve a coordenadas incorrectas
- Inflar la excepción en el fragmento de mapa de Google en ViewPager con TabLayout
- Mapa no funciona después de instalar desde la tienda de juegos en android
- GetSupportFragmentManager (). FindFragmentById (R.id.map) comenzó a devolver null
- Android Google Maps v2 - Tecla de depuración vs tecla de liberación
- El logcat de Android está inundado con "W / API de Google Maps para Android: GLHudOverlay obsoleto; Draw (): no-op "
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 suisFollowing
atrue
) -
OnMyLocationChangeListener
– cuando suisFollowing
estrue
, llame aGoogleMap.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 }
- Biblioteca de soporte técnico de Android appcompat_v7 v21.0.1 da error
- La validación de URL funciona bien, pero mantiene la conexión y restringe las solicitudes adicionales