Как захватить событие onSwipeDown в Google Glass с помощью собственного приложения?

Мне удалось захватить большинство событий, вызванных сенсорной панелью Google Glass, используя SimpleOnGestureListener в родном приложении.

С помощью следующего кода вы можете записывать эти события

MainActivity.java:

private GestureDetector gestureDetector;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    gestureDetector = new GestureDetector(this, new MyGestureListener());
}

@Override
public boolean onGenericMotionEvent(MotionEvent event)
{
    gestureDetector.onTouchEvent(event);
    return true;
}

MyGestureListener:

public class MyGestureListener extends android.view.GestureDetector.SimpleOnGestureListener
{
    @Override
    public boolean onFling(MotionEvent start, MotionEvent finish, float velocityX, float velocityY)
    {     
        // check for velocity direction to identify swipe forward / backward / up and down
        return true;
    } 
}

Я нашел два разных источника для обработки жестов, которые я пробовал:

Но ни с одним из них я не смог поймать событие swipeDown.

Обратный вызов onFling() вызывается только при "прокрутке вперед", "проведите по экрану назад" и "проведите пальцем вверх", но никогда не вызывается, когда я делаю "прокрутку вниз".

Любые подсказки или вам уже удалось поймать салфетки? Я действительно здесь не знаю.

Ответ 1

Вот (странное) решение.

Кажется, что жест swipeDown не является жестом, но больше нажимает кнопку.

Это означает, что вы должны использовать методы обратного вызова своей активности для захвата этих событий.

private static final int KEY_SWIPE_DOWN = 4;

@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
    if (keyCode == KEY_SWIPE_DOWN)
    {
        // there was a swipe down event
        return true;
    }
    return false;
}

Мне кажется, вам не нужно заботиться о обратном вызове onKeyDown(), потому что этот обратный вызов запускается только напрямую до события onKeyUp(), а не когда вы начинаете жест.

Ответ 2

Интересно, что я думаю, что это может быть какая-то ошибка, поскольку, по крайней мере, с установкой XE12 мое стекло, кажется, ловит вниз по экрану "Жест" примерно один раз в десять раз. Фактический тест, на который я рассчитывал, составлял 5, 15, 3 и 8 Активность onKeyUp до GestureDetector.SimpleOnGestureListener onFling.

Итак, я поймаю обоих и выполняю одну и ту же функцию в каждом.

Ответ 3

Согласно документации GDK, так оно и делается. Нисходящий саблей переводится в KEYCODE_BACK.

    public boolean onKeyDown(int keycode, KeyEvent event) {
          if (keycode == KeyEvent.KEYCODE_BACK) {
           // Do something here
              return true;
          }
      ...
        super.onKeyDown(keyCode, event)
        }