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?
- Combo de IdentityHashMap y WeakHashMap
- ¿Por qué todos mis mapas de bits sobresalen un 200%?
- Cómo generar un código de hash exclusivo para la entrada de cadena en android ...?
- Mapbox no comienza en un fragmento
- Cómo utilizar WMS y WFS en Android
¡Gracias!
- Cómo descargar osmdroid azulejos en el usuario final?
- ¿Es posible mover un fondo de azulejos? (Scroll infinito con TileMode.REPEAT)
- Ordenar una lista basada en otra lista
- Android con PorterDuff para combinar imágenes
- Causado por: java.lang.OutOfMemoryError: tamaño de mapa de bits supera el presupuesto de VM
- Mostrar widgets en la vista de mapa
- Obtener las líneas de GL10 dibujo de imágenes junto a la otra, la solución?
- Android: Línea # 9 del archivo XML binario: error de inflado del fragmento de clase
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
- Buscar en todos los lugares en el nombre de la ciudad
- Android Parse: No se puede actualizar el usuario local