10

我能够使用原生应用程序中的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;
}

我的手势监听器:

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;
    } 
}

我发现了两种不同的手势处理来源:

  1. 在 Android 中捕获 Glass D-Pad 事件
  2. 捕获手势控件以在本机 Android Glass 应用程序中使用

但是没有一个我能够捕捉到 swipeDown 事件。

回调 onFling() 仅在“向前滑动”、“向后滑动”和“向上滑动”时调用,但在“向下滑动”时从未调用过。

任何提示或您是否已经设法赶上向下滑动?我在这里真的一无所知。

4

3 回答 3

9

这是(奇怪的)解决方案。

似乎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() 事件之前直接触发,而不是在您开始手势时触发。

于 2013-08-08T22:39:12.780 回答
0

有趣的是,我认为这可能是某种错误,因为至少安装了 XE12 后,我的 Glass 似乎每十次就会捕捉到向下滑动手势。我计算的实际测试是 5、15、3 和 8 活动onKeyUpGestureDetector.SimpleOnGestureListener onFling.

所以我抓住了两者,并在每一个中执行相同的功能。

于 2014-01-18T16:46:47.807 回答
0

根据 GDK 文档,这就是它的完成方式。向下滑动转换为 KEYCODE_BACK。

    public boolean onKeyDown(int keycode, KeyEvent event) {
          if (keycode == KeyEvent.KEYCODE_BACK) {
           // Do something here
              return true;
          }
      ...
        super.onKeyDown(keyCode, event)
        } 
于 2014-07-09T16:18:20.803 回答