2012-01-04 58 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具有内置的自动双击放大,但没有比使用变焦控制更好的了。