¿Hay alguna forma de acceder a la API de mapas de Android, donde puedo detectar el centro del mapa una vez completada la animación? Quiero utilizar esta información para cargar marcadores de un servidor de forma dinámica. Gracias BDandroid maps: cómo determinar el centro del mapa después de que se haya completado una operación de arrastre
Respuesta
¿Está utilizando un MapActivity
? Aquí está el código que he utilizado:
MapView mapView = (MapView)findViewById(R.id.map);
Projection projection = mapView.getProjection();
int y = mapView.getHeight()/2;
int x = mapView.getWidth()/2;
GeoPoint geoPoint = projection.fromPixels(x, y);
double centerLatitude = (double)geoPoint.getLatitudeE6()/(double)1E6;
double centerLongitude = (double)geoPoint.getLongitudeE6()/(double)1E6;
sí es necesario añadir un código similar a esto también:
@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
boolean result = super.dispatchTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP)
reload_map_data(); /// call the first block of code here
return result;
}
También he estado buscando una solución "hizo extremo arrastre" que detecta el mapa centro en el momento justo después de que el mapa terminó de moverse. Yo no lo he encontrado, por lo que he hecho esta sencilla aplicación que no funciona bien:
private class MyMapView extends MapView {
private GeoPoint lastMapCenter;
private boolean isTouchEnded;
private boolean isFirstComputeScroll;
public MyMapView(Context context, String apiKey) {
super(context, apiKey);
this.lastMapCenter = new GeoPoint(0, 0);
this.isTouchEnded = false;
this.isFirstComputeScroll = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
this.isTouchEnded = false;
else if (event.getAction() == MotionEvent.ACTION_UP)
this.isTouchEnded = true;
else if (event.getAction() == MotionEvent.ACTION_MOVE)
this.isFirstComputeScroll = true;
return super.onTouchEvent(event);
}
@Override
public void computeScroll() {
super.computeScroll();
if (this.isTouchEnded &&
this.lastMapCenter.equals(this.getMapCenter()) &&
this.isFirstComputeScroll) {
// here you use this.getMapCenter() (e.g. call onEndDrag method)
this.isFirstComputeScroll = false;
}
else
this.lastMapCenter = this.getMapCenter();
}
}
Eso es todo, espero que ayude! o/
Esto funcionó, esta debería ser la respuesta aceptada. – Federico
Desde agosto de 2016 Maps para Android es capaz de detectar eventos tales como onCameraMoveStarted
(y las razones para el movimiento, por ejemplo, REASON_GESTURE
, REASON_DEVELOPER_ANIMATION
.
El siguiente código (en su mayoría tomada de la docs) da una idea de lo que puede lograr:?.
public class MyCameraActivity extends FragmentActivity implements
OnCameraMoveStartedListener,
OnCameraMoveListener,
OnCameraMoveCanceledListener,
OnCameraIdleListener,
OnMapReadyCallback {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_camera);
SupportMapFragment mapFragment =
(SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
mMap = map;
mMap.setOnCameraIdleListener(this);
mMap.setOnCameraMoveStartedListener(this);
mMap.setOnCameraMoveListener(this);
mMap.setOnCameraMoveCanceledListener(this);
// Show Sydney on the map.
mMap.moveCamera(CameraUpdateFactory
.newLatLngZoom(new LatLng(-33.87365, 151.20689), 10));
}
@Override
public void onCameraMoveStarted(int reason) {
if (reason == OnCameraMoveStartedListener.REASON_GESTURE) {
Toast.makeText(this, "The user gestured on the map.",
Toast.LENGTH_SHORT).show();
} else if (reason == OnCameraMoveStartedListener
.REASON_API_ANIMATION) {
Toast.makeText(this, "The user tapped something on the map.",
Toast.LENGTH_SHORT).show();
} else if (reason == OnCameraMoveStartedListener
.REASON_DEVELOPER_ANIMATION) {
Toast.makeText(this, "The app moved the camera.",
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCameraMove() {
Toast.makeText(this, "The camera is moving.",
Toast.LENGTH_SHORT).show();
}
@Override
public void onCameraMoveCanceled() {
Toast.makeText(this, "Camera movement canceled.",
Toast.LENGTH_SHORT).show();
}
@Override
public void onCameraIdle() {
Toast.makeText(this, "The camera has stopped moving.",
Toast.LENGTH_SHORT).show();
// Here you get the camera center
GeoPoint geoPoint = projection.fromPixels(mMap.getHeight()/2, mMap.getWidth()/2);
double centerLat = (double)geoPoint.getLatitudeE6()/(double)1E6;
double centerLng = (double)geoPoint.getLongitudeE6()/(double)1E6;
}
}
- 1. ¿Cómo detener el seguimiento del enlace hasta después de que se haya completado jQuery .animate?
- 2. Llamada de Android de nuevo después de que la representación del diseño se haya completado?
- 3. Espere hasta que se haya completado .append()
- 4. Redirigir antes de que se haya completado la carga POST
- 5. ¿Cómo verificar los resultados del trabajo del paquete SSIS después de que se haya completado su ejecución?
- 6. Google Maps JS v3: visualización del mapa: ninguna; después de la inicialización del mapa que causa el mapa dañado
- 7. ¿Es posible cambiar los estilos de Google Map después de que se haya inicializado el mapa?
- 8. ¿Cómo puedo cargar un KML en el mapa de Google, sin cambiar el centro del mapa
- 9. ¿Cómo se determina que una operación de arrastre ha finalizado en FireMonkey?
- 10. ¿Cómo cambio el tamaño de un Google Map con JavaScript después de que se haya cargado?
- 11. ¿Cómo puedo forzar a Selenium a ejecutar pruebas solo después de que se haya completado $ (document) .ready()?
- 12. Google Maps: cómo evitar que InfoWindow cambie el mapa
- 13. ¿Cómo reiniciar EditText después de que se ha completado una acción?
- 14. Agregar servicios después de que se haya construido el contenedor
- 15. ¿Cómo cancelo programáticamente una operación de arrastre jQuery?
- 16. Centro Google Maps (V3) en el tamaño del navegador (sensible)
- 17. marcador de arrastre fuera del mapa al elemento html
- 18. Jquery continuar con otra función ajax después de que la primera llamada a la función ajax se haya completado completamente
- 19. Arrastre un pin de anotación en una vista de mapa
- 20. Mapa límites Utilizando Android de Google Maps
- 21. Confina el arrastre de Google Maps V3 Marker a Polyline
- 22. Google Maps API: Calcular el centro/Zoom de Polyline
- 23. C# - Esperando que se complete una operación de copia
- 24. WPF cancela la operación de arrastre
- 25. Salir de una pantalla después de que se haya terminado una secuencia de comandos
- 26. Ejecutando Javascript después de que el valor seleccionado del control se haya establecido
- 27. ¿Cómo evito que FormView elimine los valores ingresados del usuario después de que se haya activado el método de inserción?
- 28. Encontrar el centro de múltiples ubicaciones en Google Maps
- 29. Determinar cuándo un video ha completado el almacenamiento en búfer
- 30. Extraño "La colección se modificó después de que se haya creado la instancia del enumerador" excepción
¿esto manejar la "aventura" en el mapa sigue moviendo un poco retirado si arrojarlo (después de levantar el dedo) –
Hola gracias por la marcc respuesta, pero Necesito encontrar una manera de detectar cuando la animación de pan se detiene para que Puedo usar tu código de cálculo central en ese punto. – vamsibm