Mapbox Android SDK – Marcador arrastrable

Cómo hacer que un marcador se pueda arrastrar en el Mapbox Android SDK ? ¿Eso es posible?

Si no es así, ¿qué otro motor de mapa abierto libre admite esta función?

¡Gracias!

Tuve que implementar marcadores arrastrables para uno de mis proyectos. La única solución que encontré es extender la clase de Marker existente con mehod comprobando el evento de arrastre y actualizando la posición del marcador en consecuencia.

package com.example.map; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.RectF; import android.util.Log; import android.view.MotionEvent; import android.view.View; import com.mapbox.mapboxsdk.api.ILatLng; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.overlay.Marker; import com.mapbox.mapboxsdk.views.MapView; import com.mapbox.mapboxsdk.views.util.Projection; public class DraggableMarker extends Marker { private static final String TAG = "map.DraggableMarker"; private boolean mIsDragged; private static final RectF mTempRect = new RectF(); private static final PointF mTempPoint = new PointF(); private float mDx, mDy; public DraggableMarker(String title, String description, LatLng latLng) { super(title, description, latLng); mIsDragged = false; } public DraggableMarker(MapView mv, String aTitle, String aDescription, LatLng aLatLng) { super(mv, aTitle, aDescription, aLatLng); mIsDragged = false; } public boolean drag(View v, MotionEvent event) { final int action = event.getActionMasked(); if(action == MotionEvent.ACTION_DOWN) { Projection pj = ((MapView)v).getProjection(); RectF bound = getDrawingBounds(pj, mTempRect); if(bound.contains(event.getX(), event.getY())) { mIsDragged = true; PointF p = getPositionOnScreen(pj, mTempPoint); mDx = px - event.getX(); mDy = py - event.getY(); } } if(mIsDragged) { if((action == MotionEvent.ACTION_CANCEL) || (action == MotionEvent.ACTION_UP)) { mIsDragged = false; } else { Projection pj = ((MapView)v).getProjection(); ILatLng pos = pj.fromPixels(event.getX() + mDx, event.getY() + mDy); setPoint(new LatLng(pos.getLatitude(), pos.getLongitude())); } } return mIsDragged; } } 

Más tarde, tendrá que agregar el oyente a los eventos táctiles en MapView y comprobar si su marcador (o uno de los muchos de su colección de marcadores) está afectado por el evento.

 mMarker = new DraggableMarker(mMapView, "", "", aCenter); mMarker.setIcon(new Icon(getActivity().getApplicationContext(), Icon.Size.SMALL, "marker-stroked", "FF0000")); mMapView.addMarker(mMarker); mMapView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return mMarker.drag(v, event); } }); 

¿Ha explorado Folleto? Ellos son compatibles con Android, IOS y todas las plataformas móviles estándar. Por lo que recuerdo, incluso Mapbox SDK se ha construido sobre Leaflet.

Aquí hay un enlace al que puede hacer referencia: http://leafletjs.com/examples/mobile.html

  • Mapa personalizado de Android
  • Android: Pasar un mapa hash entre las actividades
  • No se puede mostrar el mapa en Android
  • ¿Cómo programar el uso del mapa en android para mostrar la dirección?
  • Recicle el mapa de bits de ImageView
  • Diferentes marcadores con nombre en Google Android Map
  • Android: Google Map no muestra
  • Cómo mostrar la barra de escala de mapa en el mapa android v2
  • No mostrar mosaicos en la aplicación de mapas sin conexión de Android que utiliza osmdroid con el archivo MBTiles
  • Encuentra la caja de encuadernación de un conjunto de Geopuntos Mapbox
  • Android Map API v2 no muestra mapa en algunos dispositivos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.