2015-03-14 3 views
0

У меня есть приложение для Android Xamarin с GestureDetector. На моем устройстве (Sony Xperia S5303) и в эмуляторах он работает нормально. Однако на планшете Samsung Galaxy событие OnSingleTapUp запускается дважды, даже если я касаюсь экрана только один раз. Поскольку событие проверяется OnSingleTapConfirmed, и устройство ведет себя так, как будто были сделаны два крана, следующий метод никогда не вызывается:Событие OnSignleTapUp срабатывает дважды

public bool OnSingleTapUp(MotionEvent e) 
{ 
    if (PersistentContext.LoggedPlayer.Token) 
    { 
     if (simpleOnGestureListener.OnSingleTapConfirmed(e)) 
     { 
      Move(e); 
     } 
     return true; 
    } 
    return false; 
} 

Странная вещь, что при нажатии на кнопку, метод кнопки называется только один раз. Может ли кто-нибудь сказать мне, что может вызвать это странное поведение и как его избежать?

ответ

1

Вместо этого вы должны использовать onSingleTapConfirmed(MotionEvent event). Таким образом, андроид делает это одним нажатием и не запускает событие дважды.

Edit:, если вы решили использовать onSingleTapUp(MotionEvent event), то вы можете использовать event.getEventTime() и если разница во времени между первым и вторым событиями меньше ПОРОГ как 200мс или что-то, считают нежелательными второй раз выстрелил коснитесь и проигнорируйте его.

Edit 2: Поскольку я не использую Xamarin я мог бы быть совершенно неправильно, но я думаю, что вы должны изменить код следующим образом: (я имею в виду забыть onSingleTapUp полностью и переместить весь wyour код в onSingleTapConfirmed)

@Override 
public boolean onSingleTapConfirmed(MotionEvent event) { 
     if (PersistentContext.LoggedPlayer.Token) 
     { 
       Move(e); 
      return true; 
     } 
     return false; 
} 

Надеюсь, это поможет и удачи!

+0

Если вы внимательно прочитали вопрос, вы увидите, что я использую onSingleTapConfirmed. Проблема в том, что даже тогда событие вызывается дважды. Я сделал простой способ обхода путем реализации onDoubleTap и присвоения ему той же функциональности, поскольку я не использовал onDoubleTap. Однако даже у моих коллег были неоднократные проблемы с устройствами Samsung. Интересно, почему Google не контролирует реализацию Samsungs Android немного больше. – Storm

+0

Да, я вижу, что я не использую Xamarin, но вот то, что вижу: способ использования onSingleTapConfirmed - проблема. onSingleTapUp работает на два шага вперед и, конечно же, есть подтверждение для нажатия, поэтому вы отключите эффект onSingleTapConfirmed. Я отредактировал свой ответ с помощью некоторого фрагмента кода, и я надеюсь, что он сработает для вас. –

+0

На самом деле, я сделал то же самое :) все еще, устройства Samsung дважды уволили событие. Я знаю, что аналогичная проблема возникла и в PhoneGap. Возможно, он был обновлен в новых версиях Android/Xamarin. Но я закончил проект около полугода назад и с тех пор не вернулся, так что я не могу это подтвердить. – Storm