2014-09-23 2 views
3

Я пытаюсь отключить масштабирование и панорамировать карту в карточке. Я использую mapbox 0.4.0. В настоящее время я могу отключить масштабирование, но не может отключить сковородуMapbox Android отключить прокрутку и панорамирование карты

MapView mv = (MapView) tab.findViewById(R.id.mapid); 
    mv.setZoom(14); 
    mv.setMaxZoomLevel(14); 
    mv.setMinZoomLevel(14); 

ответ

4

Просто переопределить OnTouch возвращения true:

mapView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return true; 
    } 
}); 
+1

Простой и худой. Это должен быть принятый ответ. –

1

К сожалению, единственным решением является поставить прозрачный вид сверху на карте, которая будет потреблять штрихи. Я использую Button с прозрачным фоном. На этом этапе MapBox еще не разрешил разработчикам отключать взаимодействие с пользователем.

+0

Думая об этой же идее. Я борюсь с анимацией, которая отменяется простым касанием карты. (отключение всех жестов не помогает мне в моем случае, потому что это просто поведение прикосновений). – Tobliug

+0

Просто пример ссылки, чтобы получить больше контекста о clickable = "true": https://stackoverflow.com/questions/16377593/how-to-disable-behind-view-click-event-framelayout – Tobliug

4

Мне нужно было сделать то же самое, но в MapBox sdk нет ничего соответствующего функциональности. Итак, я что-то выясняю сам. Я настроил MapView из MapBox sdk с включением/отключением функции панорамирования. Для этого я использовал SimpleTwoFingerDoubleTapDetector. Благодаря @Sam для этого класса, который помогает мне обнаруживать два пальца двойного крана.

Мой класс пользовательских MapView:

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

Итак, теперь, когда вы будете получить доступ к MapView в вашей деятельности:

mapView = (MyMapView) findViewById(R.id.mapid); 
//Here you can play with enabling/disabling pan. 
mapView.setPanShouldEnabled(false); 

Это могло бы помочь кто то. :)

6

В текущей версии (4.1), то это, вероятно, следует сделать:

map.getUiSettings().setZoomControlsEnabled(false); 
map.getUiSettings().setZoomGesturesEnabled(false); 
map.getUiSettings().setScrollGesturesEnabled(false); 

Или, если вы хотите избавиться от взаимодействия полностью :

map.getUiSettings().setAllGesturesEnabled(false); 
+0

это правильный ответ – Webserveis

Смежные вопросы