Animación de marcadores en Google Maps V2
¿Cuál es la mejor manera de animar marcadores en Goole Maps usando v2 Api?
Estoy trabajando en un mapa centrado juego donde rastrear las ubicaciones de las personas y mostrarlos en el mapa de unos a otros para ver. A medida que la gente se mueve, quiero animar un marcador de su corriente a su última posición. Cada persona tiene una dirección, así que necesito girar el marcador apropiadamente.
- ¿Cómo mover la cámara cuando el marcador sale de la pantalla?
- Estoy tratando de buscar lugares cercanos como bancos, restaurantes, cajeros automáticos dentro del área dibujada en google maps en android
- Adición de botones para correlacionar infowindow android
- NoClassDefFoundError en la biblioteca Google Play Services V2
- ¿Existe una API para la navegación de Google Maps en Android?
¿Cuál es la mejor manera de hacerlo utilizando la nueva API de Google Maps?
- Selección de la API de Google Places sólo determinados tipos de lugares
- Intentando mostrar StreetView utilizando Google Maps Android API v2 en android pero no consiguiendo que funcione
- Cómo encontrar la distancia (por carretera) entre 2 puntos geo en la aplicación de Android sin utilizar google map direction api?
- Obtener Lat Lang de un place_id devuelto por autocompletar lugar api
- Dibuja una ruta siguiendo tu ubicación en Google Maps para Android
- Android Maps API v2 - ¿acercamientos a la rotación del marcador?
- Cómo actualizar marcadores en el mapa cuando se utiliza ClusterManager
- Android cómo desenmarañar en un solo toque en un marcador de clúster v2 mapas
Algunos ingenieros de Google han proporcionado un vídeo de demostración agradable con un código de muestra elegante sobre cómo animar marcadores desde un punto de partida hasta un punto final para todas las versiones de Android:
El código correspondiente está aquí:
https://gist.github.com/broady/6314689
Y un video de demostración agradable de todo en acción.
ANTIGUA RESPUESTA PÉRDIDA ABAJO
En la documentación, se menciona que los iconos de marcadores no se pueden cambiar:
Icono
Un mapa de bits que se muestra para el marcador. Si el icono se deja sin ajustar, se muestra un icono predeterminado. Puede especificar una coloración alternativa del icono predeterminado mediante defaultMarker (float). No puede cambiar el icono una vez que haya creado el marcador.
Documentación de Google Maps API v2
Usted va a tener que hacer un seguimiento de los marcadores específicos, tal vez utilizando un método similar al descrito aquí: Vincular un marcador a un objeto , a continuación, averiguar qué marcador necesita actualizar. Llame .remove()
en el marcador, luego cree una imagen girada dependiendo de la "dirección" que desee, cree un nuevo Marcador con esa imagen y añada el nuevo Marcador al mapa.
No es necesario "borrar" el mapa, simplemente elimine el marcador que desea modificar, cree uno nuevo y vuelva a agregarlo al mapa.
Desafortunadamente, la nueva API de Google Maps todavía no es muy flexible. Esperamos que Google continúe mejorando.
Marcador tiene una nueva función añadida como de rev.7 de API v2. Marker.setIcon , por lo que puede utilizar varios iconos para mostrar la dirección.
Ejemplo de uso del analizador de DiscDev (arriba):
LatLng fromLocation = new LatLng(38.5, -100.4); // Whatever origin coordinates LatLng toLocation = new LatLng(37.7, -107.7); // Whatever destination coordinates Marker marker = mMap.addMarker(new MarkerOptions().position(firstLocation)); MarkerAnimation.animateMarkerToICS(marker, toLocation, new LatLngInterpolator.Spherical());
Y para aquellos de ustedes que utilizan GPS / o cualquier proveedor de posición que recibe actualizaciones de ubicación:
Marker ourGlobalMarker; // We've got a location from some provider of ours, now we can call: private void updateMarkerPosition(Location newLocation) { LatLng newLatLng = new LatLng(newLocation.getLatitude(), newLocation.getLongitude()); if(ourGlobalMarker == null) { // First time adding marker to map ourGlobalMarker = mMap.addMarker(new MarkerOptions().position(newLatLng)); } else { MarkerAnimation.animateMarkerToICS(ourGlobalMarker, newLatLng, new LatLngInterpolator.Spherical()); } }
IMPORTANTE:
Dentro de 1MarkerAnimation.java
Si la duración de la animación está establecida en X, y estás recibiendo actualizaciones de localización en una frecuencia menor que X, se ejecutarán varias animaciones y podrías ver el marcador parpadeando.
Para evitar esto, el método animationMarkerToICS
(que tomé aquí animationMarkerToICS
por ejemplo), debería ser algo como esto,
Implementación del método completo:
private static Animator animator; // MAKING ANIMATOR GLOBAL INSTEAD OF LOCAL TO THE STATIC FUNCTION ... // Ice Cream Sandwich compatible @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public static void animateMarkerToICS(Marker marker, LatLng finalPosition, final LatLngInterpolator latLngInterpolator) { TypeEvaluator<LatLng> typeEvaluator = new TypeEvaluator<LatLng>() { @Override public LatLng evaluate(float fraction, LatLng startValue, LatLng endValue) { return latLngInterpolator.interpolate(fraction, startValue, endValue); } }; Property<Marker, LatLng> property = Property.of(Marker.class, LatLng.class, "position"); // ADD THIS TO STOP ANIMATION IF ALREADY ANIMATING TO AN OBSOLETE LOCATION if(animator != null && animator.isRunning()) { animator.cancel(); animator = null; } animator = ObjectAnimator.ofObject(marker, property, typeEvaluator, finalPosition); animator.setDuration((long) ANIMATION_DURATION); animator.start(); }
Disfrutar.
- Clases HTTP obsoletas Android lollipop 5.1
- ¿Cómo recuperar la instantánea del mapa de la actividad del selector de lugares?