2012-01-04 73 views
1

我一直在使用OSMdroid我如何在mapview中實現自己的雙擊?

我有兩個縮放級別的地圖圖塊,即12和15

現在一般的雙擊放大1級

想什麼IM的MapView離線地圖上要做的就是把setZoomLevel()當作15後用戶雙擊在地圖上,

這可能嗎?

我試着用onGestureListener,但不知何故,它不工作

任何提示或在這個方向或樣本代碼的線索將是一個很大的幫助,感謝

回答

3

我對Osmdroid MapView有類似的要求,因爲我不希望它做'在雙擊位置的中心並放大'默認功能。我想讓它彈出一個吐司。在我的情況下,我在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標記上的點擊 - 這是否意味着我必須實現「是標記內部的點擊」? – 2013-09-16 12:10:25

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 – 2012-01-04 11:46:44

+0

檢查此答案http://stackoverflow.com/a/8168953/760489 – Pratik 2012-01-04 11:53:27

+0

我明白你想說什麼,但mapview已經有一個默認的雙擊實現,我想改變 – 2012-01-04 11:57:09

0

在最新OSMdroid庫4.0具有內置的自動雙擊放大,但沒有比使用變焦控制更好的了。