2013-05-06 5 views
2

Im создание приложения OpenStreetMaps с использованием OSMDroid lib. Мне нужен жест LongPress, чтобы добавить маркеры в массив OverlayItem, чтобы показать их все, но я не могу получить доступ к LongPress в любом случае.LongPress на OSMDroid карта не работает

Я попытался с GestureListener, переопределив событие onTouch, используя GestureDetector (который устарел в наши дни), и я не могу найти решение этой проблемы.

Единственный способ, который я получаю жест через setOnLongClickListener, но я должен выбирать между наличием longpress или панорамированием карты, и я жадный, и я хочу, как: р

У кого какие идеи?

С уважением!

ответ

1

Я имею столкнуться решение через OSMBonusPack библиотеки.

Объект MapsEventsReceiver предоставляет вам простой способ обработки жестов карты. Вы должны переопределить методы singleTapUpHelper и 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++; 
} 
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

+0

Где вы размещаете код? У меня это в классе, расширяющем MapView. – manimaul

Смежные вопросы