【问题标题】:How to handle long press on a map, using OSMDroid / OSMBonusPack in Android?如何在 Android 中使用 OSMDroid / OSMBonusPack 处理地图上的长按?
【发布时间】:2014-04-02 07:41:52
【问题描述】:

我正在尝试在 Android 上创建一个带有地图的简单应用程序。我正在使用 OSMDroid 的 MapView 来渲染基本的 OpenStreet Map mapview。

我有一个自定义的MapActivity,它实现了MapEventsReceiver 接口(来自OSMBonusPack)。在我的活动onCreate() 中,我创建了一个MapEventsOverlay,并将其添加到mapView

问题是,longPressHelper()singleTapUpHelper() 永远不会被调用。请参阅下面的代码。

public abstract class CustomMap extends BaseActivity implements MapEventsReceiver{
//variable declarations follow
private MapView mMapView;

@Override
protected void onCreate(Bundle icicle) {
super.onCreate(load);
setContentView(R.layout.activity_map_main_screen);

mMapView = (MapView) findViewById(R.id.mapmainscreen);
mMapView.setBuiltInZoomControls(true);
mMapView.setClickable(true);

MapEventsOverlay evOverlay = new MapEventsOverlay(this, this);
mMapView.getOverlays.add(evOverlay);
mMapView.invalidate();

//tile source / tile provider are set by another method elsewhere

//somewhere in my code (same class file) I also have this:

@Override
public boolean longPressHelper(IGeoPoint arg0) {
Log.d(TAG, "longPressHelper was called");//this is never called
return true;
}

@Override
public boolean singleTapUpHelper(IGeoPoint arg0) {
Log.d(TAG, "singleTapUpHelper was called");//this is never called
return true;
}
}      
}

请注意,我已经尝试过这里建议的解决方案OSMDroid: Adding a marker when user taps on map

非常感谢任何帮助。

【问题讨论】:

    标签: android openstreetmap osmdroid


    【解决方案1】:

    您提供的代码是正确的。 所以问题出在其他地方......

    您能否指定使用的版本:Android SDK、osmdroid 和 OSMBonusPack?

    也许布局中有什么东西?您可以通过与 OSMBonusPackTuto activity_main.xml 布局进行比较来检查。

    【讨论】:

      【解决方案2】:

      现在需要更改代码(API 26?),不推荐使用旧方法。 像这样的:

          MapEventsReceiver mReceive = new MapEventsReceiver()
          {
              @Override
              public boolean singleTapConfirmedHelper(GeoPoint p)
              {
                  //do whatever you need here
                  return false;
              }
      
              @Override
              public boolean longPressHelper(GeoPoint p)
              {
                  //do whatever you need here
                  return false;
              }
          };
          MapEventsOverlay evOverlay = new MapEventsOverlay(mReceive);
          mMapView.getOverlays().add(evOverlay);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-04
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        • 2016-09-06
        • 1970-01-01
        • 1970-01-01
        • 2012-03-24
        相关资源
        最近更新 更多