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 ¿Es posible ver sólo un país en un mapa de google?
  • ¿Cómo puedo crear un mapa de bits enorme y blanco con Canvas?
  • No se puede mostrar el mapa en Android
  • Android - fuera de la excepción de memoria al crear mapa de bits
  • Obtener las líneas de GL10 dibujo de imágenes junto a la otra, la solución?
  • Mostrar una ubicación geográfica mediante webview
  • Problema con un gran número de marcadores en el mapa
  • ¿Es posible mover un fondo de azulejos? (Scroll infinito con TileMode.REPEAT)
  • Android: Pasar un mapa hash entre las actividades
  • Google Map v2 dentro del fragmento android
  • Mapbox Android determina el nivel de zoom que contiene todos los marcadores
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.