2013-08-08 10 views
10

Udało mi się uchwycić większość zdarzeń wywoływanych przez touchpad z szyby Google za pomocą SimpleOnGestureListener w natywnej aplikacji.Jak przechwycić zdarzenie onSwipeDown w Google Glass przy użyciu natywnej aplikacji?

z następującego kodu można uchwycić te wydarzenia

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

znalazłem dwa różne źródła przetwarzania gest Próbowałem:

  1. Capture Glass D-Pad events in Android
  2. Capturing Gesture Controls for Use in Native Android Glass Apps

Ale żaden z nich nie udało mi się złapać zdarzenie swipeDown.

Połączenie zwrotne onFling() jest wywoływane tylko przy "przesuwaniu do przodu", "przesuwaniu do tyłu" i "przesuwaniu w górę", ale nigdy nie jest wywoływane, gdy wykonuję "przeciągnięcie w dół".

Jakieś wskazówki czy już udało Ci się złapać suwak? Naprawdę nie mam pojęcia.

Odpowiedz

9

Oto rozwiązanie (dziwne).

Wydaje się, że swipeDown gest nie jest to gest, ale raczej kliknij przycisk .

Oznacza to, że należy używać metod wywołania zwrotnego swojej aktywności, aby przechwytywać te zdarzenia.

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

myślę, że nie trzeba się martwić o onKeyDown() zwrotnego, ponieważ ta funkcja zwrotna jest wyzwalany tylko bezpośrednio przed onKeyUp (zdarzenia), a nie kiedy zaczynają gest.

0

Interesujące Myślę, że to może być jakiś błąd, przynajmniej w przypadku zainstalowanego XE12, mój Szklany wydaje się łapać w dół machnięcie Gestem o jeden na dziesięć razy. Rzeczywisty test, w którym liczyłem, to 5, 15, 3 i 8 aktywności onKeyUp do GestureDetector.SimpleOnGestureListeneronFling.

Więc złapałem oba i wykonuję tę samą funkcję w każdym.

0

Tak postępuje się zgodnie z dokumentacją GDK. Przesunięcie w dół jest tłumaczone na KEYCODE_BACK.

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