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); 

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 - Bitmap y gestión de la memoria?
  • ¿Cómo puedo escalar una imagen sin borrar?
  • Android: Pregunta sobre mapas de bits, uso de memoria y escala
  • Mapbox Android determina el nivel de zoom que contiene todos los marcadores
  • Mapbox Android SDK - Marcador arrastrable
  • Cómo utilizar WMS y WFS en Android
  • Combo de IdentityHashMap y WeakHashMap
  • Cómo descargar osmdroid azulejos en el usuario final?
  • Android ¿Es posible definir un mapa en un archivo XML?
  • Android - fuera de la excepción de memoria al crear mapa de bits
  • Java.lang.IllegalStateException: Se esperaba BEGIN_OBJECT pero era STRING en la línea 1 de la columna 62
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.