【问题标题】:OSMdroid long click listener/double tapOSMdroid 长按监听器/双击
【发布时间】:2012-08-06 14:47:51
【问题描述】:

我目前正在使用 OSMdroid。
我希望能够(使用触摸屏)在我的地图上标记某些点。
第一种选择是使用长按。问题是我的系统将滚动识别为长按。 第二个选项是使用双标签。这具有更改缩放级别的效果。

我希望能够区分长按和滚动。有没有简单的方法来做到这一点?

下面有一些建议link:
但是,我不确定这些建议是否可以通过 OSMdroid 实现。

提前致谢!

爱丽儿

【问题讨论】:

  • 链接中的建议很好。我自己将 onTouchListener 直接连接到 mapView 并覆盖 doubletap

标签: multi-touch osmdroid onlongclicklistener


【解决方案1】:

当我想在 OsmMap 中添加一些触摸功能时,我也发现已经使用了点击和滚动等。

所以我做了所有手势都需要用三个手指长按才能开始。手势是用三个手指长按然后向左或向右滑动或用三个手指长按然后向上弹起。这样我的手势就不会干扰任何法线地图手势。

在检测到三指长按后,我的应用还必须消耗触摸事件。否则,osm 手势和我的手势会相互竞争,导致奇怪的滚动和缩放。

这需要添加一个特殊的Overlay 和这样的代码:

@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
    boolean detected = false;
    if (myGestureDetector.onTouchEvent(event))
    {
        detected = true;
    }

    if (myGestureDetector.isTouchEventActive())
    {
        Log.d(D_LOG, "TOUCH EVENT ACTIVE DRAIN IT");
        detected = true;
    }

    return detected;
}

【讨论】:

    【解决方案2】:

    请注意,此方法只允许单次触摸事件。

    您的活动需要implements MapEventsReceiver

    然后您需要将 A MapEventsOverlay 添加到地图中:

    //Handling Map events
    MapEventsOverlay mapEventsOverlay = new MapEventsOverlay(this, this);
    map.getOverlays().add(0, mapEventsOverlay); //inserted at the "bottom" of all overlays
    

    Documented in the OSMDroidBonus Pack Tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多