Android Google Map InfoWindow punto de anclaje después de la rotación del marcador
¿Cómo reiniciar el punto de anclaje InfoWindows marcador después de que el marcador se ha girado para estar siempre en el centro superior? El problema es que el punto de anclaje se gira junto con el marcador.
static final LatLng PERTH = new LatLng(-31.90, 115.86); Marker marker = mMap.addMarker(new MarkerOptions() .position(PERTH) .anchor(0.5,0.5) .rotation(90.0) .infoWindowAnchor(0.5,0)); //Update marker with new data (position and direction angle) var angle = 130.0; marker.setPosition(new LatLng(-30.20, 113.27)); marker.setRotation(angle); marker.setInfoWindowAnchor(x,y); // how to calculate these values?
- Obtener Lat Lang de un place_id devuelto por autocompletar lugar api
- Compruebe si el usuario está en un bosque utilizando la ubicación
- ¿Cómo agregar texto sobre polilínea en google maps?
- Cambiar Google Place Picker Appbar Text Color
- Com.google.android.gms.maps.MapFragment: No se puede resolver el símbolo "maps"
- Android Google MapView muestra sólo los mosaicos vacíos
- Mover marcador con gps en google map android
- Cómo utilizar Viewport Marker Management en Android
- ¿Cómo logro una animación suave del marcador de ubicación en android en un mapa de google?
- El tamaño del mapa IllegalStateException no debe ser 0
- "La aplicación no se ejecutará a menos que actualices los servicios de Google Play" con Google Maps API
- ¿Cuál es el enfoque correcto para crear una aplicación para Android?
- Agregar API de Google al proyecto existente de eclipse
var angle = 130.0; var x = Math.sin(-angle * Math.PI / 180) * 0.5 + 0.5; var y = -(Math.cos(-angle * Math.PI / 180) * 0.5 - 0.5); marker.setInfoWindowAnchor((float)x, (float)y);
Explicación:
Si asumimos que el marcador de mapa es de forma circular (lo más razonable para fines de rotación) y como sabemos que InfoWindow punto de anclaje (B) se puede establecer en cualquier punto de coordenada relativa de 0,0,0,0 (superior izquierda) a 1,1 (inferior derecha ) Podemos encontrar cualquier punto en la línea del círculo por el grado de rotación dada usando las fórmulas SIN y COS.
X distancia entre A y B = Radio * SIN (grado); Y distancia entre A y B = Radio * COS (grado);
Adoptándolos para las coordenadas del androide conseguimos:
var x = Math.sin(-angle * Math.PI / 180) * 0.5 + 0.5;
- Encontramos SINE desde el ángulo de rotación del depósito (valor negativo) convertido en radianes (grado * PI / 180);
- Multiplique por el radio del círculo (0.5) para obtener la distancia en el eje X;
- Desplaza a DERECHA por radio (+0.5) para que esté en el centro de la forma (en el eje X);
var y = -(Math.cos(-angle * Math.PI / 180) * 0.5 - 0.5);
- Buscar COSINE desde el ángulo de rotación del depósito (valor negativo) convertido en radianes (grado * PI / 180);
- Multiplique por el radio del círculo (0.5) para obtener la distancia en el eje Y;
- Desplaza hacia arriba por radio (-0.5) para estar en la parte superior de la forma (en el eje Y);
- Hacer valor positivo (con – signo) como sistema de coordenadas de marcador tiene valores positivos en el eje Y hacia abajo;
- Proyecto MonoDroid en una soultion que contiene un proyecto de teléfono de Windows 7?
- Cómo cambiar el idioma de com.facebook.widget.LoginButton en Android