2013-05-06 116 views
2

使用OSMDroid lib创建OpenStreetMaps应用程序。我需要LongPress手势将标记添加到OverlayItem数组中以将它们全部显示出来,但我无法访问LongPress。OSMDroid映射上的LongPress不起作用

我已经尝试过使用GestureListener重写onTouch事件,使用GestureDetector(现在已弃用),并且找不到此问题的解决方案。

我已经得到了手势唯一途径是通过setOnLongClickListener,但我有长按或平移地图之间作出选择,我很贪心,我希望两个:P

任何人有任何想法?

问候!

回答

1

我不得不通过OSMBonusPack库遇到一个解决方案。

对象MapsEventsReceiver授予您处理地图手势的简单方法。 您必须覆盖singleTapUpHelperlongPressHelper方法,并使用此处理程序创建新的覆盖图。

下面的代码:

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++; 
} 
0
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); 
     } 
    }); 
} 
+0

我已经GestureDetector和GestureListener受审。我在源代码上没有错误,但我没有从logcat的事件得到响应。 – leonis 2013-05-09 08:26:11

+0

你把代码放在哪里?我有一个扩展MapView的类。 – manimaul 2013-05-17 17:11:38