2012-01-04 3 views
1

Я работаю на автономной карте с помощью OSMdroidКак я могу реализовать свой собственный двойной щелчок в mapview?

У меня есть карта плитки двух уровней масштабирования, а именно 12 и 15

Теперь обычное двойное нажатие масштабирует MapView на 1 уровне

что им пытаются делать это setZoomLevel() как 15 после двойных кранов пользователя на карте,

Возможно ли это?

Я попытался с помощью onGestureListener, но почему-то не работает

Любой намек или улики в этом направлении или выборки кодов будет большая помощь, спасибо

ответ

3

У меня было аналогичное требование с MapView Osmdroid, поскольку я не хотел, чтобы он выполнял «центр на двойном постукиваемом месте и увеличивал масштаб» по умолчанию. Я хотел, чтобы он поднял Тост. В моем случае у меня был оверлей поверх MapView, поэтому я просто использовал оверлей для двойного нажатия в методе onDoubleTap. Для ваших целей вы можете просто добавить наложение, которое ничего не рисует, но имеет свои собственные функции двойного нажатия.

Итак, в конце вашего onCreate вы можете добавить наложение. Это небольшое приложение, кажется, чтобы продемонстрировать, что вы хотите - (вам нужно добавить условный код для проверки уровня масштабирования и других мастерить):.

public class OsmdroidDemoMap extends Activity { 

    private MapView   mMapView; 
    private MapController mMapController; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.osm_main); 
     mMapView = (MapView) findViewById(R.id.mapview); 
     mMapView.setTileSource(TileSourceFactory.MAPNIK); 
     mMapView.setBuiltInZoomControls(true); 
     mMapController = mMapView.getController(); 
     mMapController.setZoom(13); 
     GeoPoint gPt = new GeoPoint(51500000, -150000); 
     mMapController.setCenter(gPt); 
     DummyOverlay dumOverlay = new DummyOverlay(this); 
     List<Overlay> listOfOverlays = mMapView.getOverlays(); 
     listOfOverlays.clear(); 
     listOfOverlays.add(dumOverlay); 
    } 

    public class DummyOverlay extends org.osmdroid.views.overlay.Overlay { 

     public DummyOverlay(Context ctx) { 
      super(ctx); // TODO Auto-generated constructor stub 
     } 

     @Override 
     protected void draw(Canvas c, MapView osmv, boolean shadow) {} 

     @Override 
     public boolean onDoubleTap(MotionEvent e, MapView mapView) { 
      // This stops the 'jump to, and zoom in' of the default behaviour 
      int zoomLevel = mMapView.getZoomLevel(); 
      mMapController.setZoom(zoomLevel + 3); 
      return true;// This stops the double tap being passed on to the mapview 
     } 
    } 
+0

Что DummyOverlay - это прозрачный наложенный «размер карты»? Я пытался обнаружить щелчок на маркере DirectedLocationOverlay - значит ли это, что я должен сам реализовать «был щелчок внутри маркера»? –

0

вы можете переопределить зуммирования с событием, для этого вам необходимо определить в макет XML или вы получаете зуммирование от MapView

ZoomControls zoomControls = (ZoomControls)findViewById(R.id.zoomControl); 

View zoomOut = zoomControls.getChildAt(0); 
zoomOut.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_out_icon)); 
zoomOut.setPadding(5, 5, 5, 5); 

View zoomIn = zoomControls.getChildAt(1); 
zoomIn.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_in_icon)); 
zoomIn.setPadding(5, 5, 5, 5); 

zoomControls.setOnZoomInClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      mc.zoomIn(); 
      mapView.invalidate(); 
     } 
}); 
zoomControls.setOnZoomOutClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      mc.zoomOut(); 
      mapView.invalidate(); 
     } 
}); 

теперь вы можете реализовать свое собственное зуммирование

+0

ну, я реализовал средства управления зуммированием, но двойное нажатие должно быть реализовано, поскольку оно имеет тенденцию любого пользователя, так что не пренебрегайте им для UX –

+0

этот ответ http://stackoverflow.com/a/8168953/760489 – Pratik

+0

Я понимаю, что ур пытается сказать, но у mapview уже есть реализация по умолчанию с двойным нажатием, которую я хочу изменить. –

0

В последней OSMdroid библиотеке 4.0 имеет встроенный автоматический двойной кран приближать Но ничего лучше, чем управление масштабированием.