2013-08-08 9 views
10

sono stato in grado di catturare la maggior parte degli eventi innescati dal touchpad di un bicchiere di Google utilizzando il SimpleOnGestureListener in un'applicazione nativa.Come catturare l'evento onSwipeDown su google glass usando un'app nativa?

Con questo codice è possibile catturare questi eventi

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

ho trovato due fonti diverse per la lavorazione del gesto ho provato:

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

Ma con nessuno di loro sono stato in grado di catturare l'evento swipeDown.

Il callback su Fling() viene richiamato solo su "scorri in avanti", "scorri indietro" e "scorri verso l'alto" ma non viene mai chiamato quando eseguo il "passaggio verso il basso".

Qualche suggerimento o sei già riuscito a individuare il passaggio verso il basso? Sono davvero all'oscuro qui.

risposta

9

Ecco la (strana) soluzione.

Sembra che il gestoswipeDown in realtà non è un gesto ma più un pulsante clic.

Ciò significa che è necessario utilizzare i metodi di richiamata della propria attività per acquisire questi eventi.

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

penso che non c'è bisogno di preoccuparsi della callback onKeyDown() perché questo callback viene attivato solo direttamente prima dell'evento onKeyUp() e non quando si è all'inizio del gesto.

0

Interessante Penso che questo possa essere un qualche tipo di bug, almeno con XE12 installato, il mio Vetro sembra catturare il gesto di scorrimento verso il basso di circa una volta ogni dieci volte. Il test effettivo in cui ho contato era 5, 15, 3 e 8 Attività onKeyUp a GestureDetector.SimpleOnGestureListeneronFling.

Quindi sto recuperando entrambi e eseguendo la stessa funzione in ciascuno.

0

Secondo la documentazione GDK, questo è come è fatto. Lo scorrimento verso il basso si traduce in KEYCODE_BACK.

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