2013-09-12 4 views
0

Было очень легко подключить ItemizedIconOverlay.OnItemGestureListener к ItemizedIconOverlay (его можно передать в конструкторе). Однако DirectedLocationOverlay не имеет такого конструктора.Обнаружение касания на DirectedLocationOverlay

Я пытался сделать это:

DirectedLocationOverlay LocalDeviceMarker = new DirectedLocationOverlay(this.getBaseContext()) 
    { 
     @Override 
     public boolean onSingleTapConfirmed(final MotionEvent e, 
       final MapView mapView) 
     { 
      Toast.makeText(
        MainActivity.this, 
        getTitle() + " lat: " 
          + mLocation.getLatitudeE6() + " long: " 
          + mLocation.getLongitudeE6(), 
        Toast.LENGTH_LONG).show(); 
      return true; // No one else should handle this event. 
     } 
    }; 

но onSingleTapConfirmed, кажется, срабатывает, когда я нажимаю в любом месте на карте (а не только на стрелки, как я хотел). Каков правильный способ сделать это? Кроме того, ItemizedIconOverlay разрешил вам назначать «Заголовок» каждому элементу - существует ли способ назвать эти DirectedLocationOverlays?

ответ

1

DirectedLocationOverlay - это код, внесенный пользователями, и не является частью API Google v1, поэтому он не получает большого внимания. Он похож на ItemizedOverlay и ItemizedIconOverlay, но у него нет методов тестирования ударов, чтобы обнаружить нажатие на фактический значок. Вероятно, он должен был расширить один из этих классов, когда он был первоначально написан. Я хотел бы взглянуть на то, как мы применяем тестирование на предмет тестирования в элементарных оверлеях и реализуем одно и то же в DirectedLocationOverlay. Или вам придется расширить ItemizedIconOverlay и добавить функции поворота к методам рисования.

+0

Хорошо спасибо. Я подумал об этих двух вариантах, но я хотел убедиться, что я просто не пропустил ничего проще, прежде чем внедрять эти изменения на более низком уровне. –

+0

Я провел некоторое время и получил эту работу для одного направленного элемента, используя первый предложенный вами метод. То есть класс DirectedLocationOverlay должен знать его позицию (setLocation), что на самом деле не имеет смысла, поскольку ITEM должен знать свою позицию, а наложение должно просто отображать коллекцию элементов. Похоже, что правильная вещь - изменить OverlayItem, чтобы каждый элемент имел mBearing (по умолчанию было бы установлено 0, чтобы не изменять какое-либо текущее поведение). Тогда, если ноль элемента отличен от нуля, ItemizedIconOverlay будет вращать его. Мысли? –

+0

Это было на самом деле довольно просто, намного чище, чем в другом случае, и полностью устраняет необходимость в DirectedLocationOverlay. Я опубликовал проблему, включая исправление и демонстрацию здесь: https://code.google.com/p/osmdroid/issues/detail?id=488&thanks=488&ts=1382113925 –

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