Mapbox Android deshabilitar desplazamiento y pan el mapa
Estoy tratando de deshabilitar el zoom y pan el mapview en un mapbox. Utilizo mapbox 0.4.0. Actualmente puedo deshabilitar el zoom, pero no puedo deshabilitar la panorámica
MapView mv = (MapView) tab.findViewById(R.id.mapid); mv.setZoom(14); mv.setMaxZoomLevel(14); mv.setMinZoomLevel(14);
- Extraño problema MapView; Error de PixelConverter
- Quiero crear una aplicación para Android con un mapa que proporcione direcciones, pero no Google Maps
- Analizar objeto JSON con cadena y sólo valor
- Lona: intentando usar un mapa de bits reciclado android.graphics.Bitmap
- Diferentes marcadores con nombre en Google Android Map
- Cómo generar un código de hash exclusivo para la entrada de cadena en android ...?
- Mapbox Android SDK - Marcador arrastrable
- Recicle el mapa de bits de ImageView
- Cómo utilizar WMS y WFS en Android
- Cómo centrar el mapa en el marcador haga clic para mostrar todo InfoWindow
- MBTilesRasterDataSource no se encuentra en nutiteq SDK?
- Obtención de 0.0 para latitud y longitud mientras muestra la ubicación actual en el mapa
- Android: Línea # 9 del archivo XML binario: error de inflado del fragmento de clase
Basta con anular el OnTouch
devuelve true
:
mapView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } });
Tenía que hacer lo mismo, pero no hay nada de funcionalidad relevante que encontré en el MapBox sdk. Así que, yo averiguo algo por mi cuenta. Personalizé MapView de MapBox sdk con habilitar / deshabilitar la función panorámica. Para eso utilicé SimpleTwoFingerDoubleTapDetector . Gracias @ Sam por esta clase anterior que me ayuda a detectar dos dedos toque doble.
Mi clase MapView personalizada:
MyMapView.java:
import android.content.Context; import android.os.Handler; import android.support.v4.view.GestureDetectorCompat; import android.util.AttributeSet; import android.view.GestureDetector.OnDoubleTapListener; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import android.widget.Toast; import com.mapbox.mapboxsdk.tileprovider.MapTileLayerBase; import com.mapbox.mapboxsdk.views.MapView; public class MyMapView extends MapView implements OnGestureListener,OnDoubleTapListener { private GestureDetectorCompat mDetector; public boolean panShouldEnabled = true; public boolean isPanShouldEnabled() { return panShouldEnabled; } public void setPanShouldEnabled(boolean panShouldEnabled) { this.panShouldEnabled = panShouldEnabled; } public MyMapView(Context aContext, AttributeSet attrs) { super(aContext, attrs); init(aContext); } private void init(Context mContext) { mDetector = new GestureDetectorCompat(mContext, this); // Set the gesture detector as the double tap // listener. mDetector.setOnDoubleTapListener(this); } public MyMapView(Context aContext, int tileSizePixels, MapTileLayerBase tileProvider, Handler tileRequestCompleteHandler, AttributeSet attrs) { super(aContext, tileSizePixels, tileProvider, tileRequestCompleteHandler, attrs); init(aContext); } public MyMapView(Context aContext, int tileSizePixels, MapTileLayerBase aTileProvider) { super(aContext, tileSizePixels, aTileProvider); init(aContext); } public MyMapView(Context aContext) { super(aContext); init(aContext); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return !panShouldEnabled ? true : super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if (!panShouldEnabled) { if (detector.onTouchEvent(event)) { return true; } else { mDetector.onTouchEvent(event); } } return !panShouldEnabled ? true : super.onTouchEvent(event); } @Override public boolean onDown(MotionEvent arg0) { // TODO Auto-generated method stub return false; } @Override public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,float arg3) { // TODO Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent arg0) { // TODO Auto-generated method stub } @Override public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { // TODO Auto-generated method stub return false; } @Override public void onShowPress(MotionEvent arg0) { // TODO Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent arg0) { // TODO Auto-generated method stub return false; } @Override public boolean onDoubleTap(MotionEvent event) { zoomIn(); return true; } @Override public boolean onDoubleTapEvent(MotionEvent event) { return false; } @Override public boolean onSingleTapConfirmed(MotionEvent arg0) { return false; } SimpleTwoFingerDoubleTapDetector detector = new SimpleTwoFingerDoubleTapDetector() { @Override public void onTwoFingerDoubleTap() { Toast.makeText(getContext(), "Two Finger Double Tap", Toast.LENGTH_SHORT).show(); zoomOut(); } }; }
Por lo tanto, ahora cuando usted tendrá acceso a su mapview en su Actividad:
mapView = (MyMapView) findViewById(R.id.mapid); //Here you can play with enabling/disabling pan. mapView.setPanShouldEnabled(false);
Podría ayudar a alguien. 🙂
En la versión actual (4.1), esto probablemente debería hacer:
map.getUiSettings().setZoomControlsEnabled(false); map.getUiSettings().setZoomGesturesEnabled(false); map.getUiSettings().setScrollGesturesEnabled(false);
O si desea deshacerse completamente de la interacción:
map.getUiSettings().setAllGesturesEnabled(false);
Desafortunadamente, la única solución es poner una vista transparente encima del mapa que consumirá los toques. Utilizo un Button
con un fondo transparente. En este momento, MapBox todavía no ha permitido a los desarrolladores desactivar la interacción del usuario.
- Android – Comparación de cadenas entre dos nombres de versiones de Android
- Comparar nombres de cada recurso con el contenido de una variable de la base de datos sqlite