Java OSMDroid映射上的LongPress不工作

Java OSMDroid映射上的LongPress不工作,java,android,openstreetmap,osmdroid,Java,Android,Openstreetmap,Osmdroid,我正在使用OSMDroid库创建OpenStreetMaps应用程序。我需要LongPress手势将标记添加到OverlayItem数组中以显示所有标记,但无论如何我无法访问LongPress 我尝试过使用GestureListener,覆盖onTouch事件,使用GestureDetector(现在不推荐使用),但我找不到解决此问题的方法 我得到这个手势的唯一方法是通过设置LongClickListener,但我必须在长按或平移地图之间做出选择,我很贪婪,我想要两者:p 有人有什么想法吗 问候

我正在使用OSMDroid库创建OpenStreetMaps应用程序。我需要LongPress手势将标记添加到OverlayItem数组中以显示所有标记,但无论如何我无法访问LongPress

我尝试过使用GestureListener,覆盖onTouch事件,使用GestureDetector(现在不推荐使用),但我找不到解决此问题的方法

我得到这个手势的唯一方法是通过设置LongClickListener,但我必须在长按或平移地图之间做出选择,我很贪婪,我想要两者:p

有人有什么想法吗


问候

我通过OSMBonusPack库遇到了一个解决方案

private void setupGestureListener() {
    GestureDetector.SimpleOnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() {

        @Override
        public void onLongPress(MotionEvent e) {
            //do something
        }
    };

    final GestureDetector gestureDetector = new GestureDetector(getContext(), gestureListener);
    setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
        return gestureDetector.onTouchEvent(motionEvent);
        }
    });
}
对象
MapsEventsReceiver
为您提供了处理地图手势的简单方法。 您必须重写
singletapustalper
longPressHelper
方法,并使用此处理程序创建新的覆盖

代码如下:

MapEventsReceiver mReceive = new MapEventsReceiver() {

    @Override
    public boolean singleTapUpHelper(IGeoPoint arg0) {
     Log.d("debug", "Single tap helper");
     //your onSingleTap logic here
    return false;
    }

    @Override
    public boolean longPressHelper(IGeoPoint arg0) {
    Log.d("debug", "LongPressHelper");
    //your onLongPress logic here
    setMarker(arg0);
    return false;
    }
};

//Creating a handle overlay to capture the gestures
MapEventsOverlay OverlayEventos = new MapEventsOverlay(getBaseContext(), mReceive);
map.getOverlays().add(OverlayEventos);

//Refreshing the map to draw the new overlay
map.invalidate();


//I use this method to set the marker on touchPoint
    protected void setMarker(IGeoPoint arg0) {

touchPoint = (GeoPoint) arg0;
targetPoint = touchPoint;
path.addPoint(targetPoint);

//Listener to handle item's(markers) events
 myOnItemGestureListener = new OnItemGestureListener<OverlayItem>() {

    @Override
    public boolean onItemLongPress(int arg0, OverlayItem arg1) {
    Log.d("debug", "Testing long tap on item");
    //your item onLongPress logic here
        return false;
    }

    @Override
    public boolean onItemSingleTapUp(int index, OverlayItem item) {
    Log.d("debug", "Testing single tap on item");
    //your item onSingleTap logic here
        return true;
    }
};

itemarray.add(new OverlayItem("Marker " + cnt, "Info about marker " + cnt, touchPoint));

ItemizedOverlayWithFocus<OverlayItem> overlayDeItems = new ItemizedOverlayWithFocus<OverlayItem>(getBaseContext(), itemarray, myOnItemGestureListener);
map.getOverlays().add(overlayDeItems);

overlayDeItems.setFocusItemsOnTap(true);
map.invalidate();
itemarray = new ArrayList<OverlayItem>();
   cnt++;
}
MapEventsReceiver mReceive=新建MapEventsReceiver(){
@凌驾
公共布尔单点输入(IGeoPoint arg0){
Log.d(“调试”、“单点击辅助”);
//这里是你的onSingleTap逻辑
返回false;
}
@凌驾
公共布尔值longPressHelper(IGeoPoint arg0){
Log.d(“debug”、“LongPressHelper”);
//你的逻辑在这里
设置标记(arg0);
返回false;
}
};
//创建控制柄覆盖以捕捉手势
MapEventsOverlyEventTos=新的MapEventsOverlay(getBaseContext(),mReceive);
map.getOverlays().add(OverlayEventos);
//刷新地图以绘制新覆盖
map.invalidate();
//我使用此方法在接触点上设置标记
受保护的无效设置标记(IGeoPoint arg0){
接触点=(地理点)arg0;
目标点=接触点;
路径.添加点(目标点);
//用于处理项(标记)事件的侦听器
myOnItemGestureListener=新建OnItemGestureListener(){
@凌驾
公共布尔值(int arg0,OverlayItem arg1){
Log.d(“调试”,“测试长点击项”);
//您的商品只需按此处的逻辑即可
返回false;
}
@凌驾
公共布尔值onItemSingleTapUp(整型索引,覆盖项项){
Log.d(“调试”,“测试单点击项”);
//您的项在SingleTap逻辑中位于此处
返回true;
}
};
添加(新的覆盖项(“标记”+cnt,“关于标记的信息”+cnt,接触点));
ItemizedOverlayWithFocus OverlayItems=新建ItemizedOverlayWithFocus(getBaseContext(),itemarray,myOnItemGestureListener);
map.getOverlays().add(overlayditems);
setFocusItemsOnTap(true);
map.invalidate();
itemarray=新的ArrayList();
cnt++;
}

我以前尝试过使用GestureDetector和GestureListener。我的源代码没有错误,但我没有从logcat的事件中得到响应。你把代码放在哪里?我在一个扩展MapView的类中有这个。