2013-08-08 6 views
10

konnte ich die meisten Ereignisse durch das Touchpad eines Google-Glas mit dem SimpleOnGestureListener in einer nativen App ausgelöst erfassen.Wie erfasst man das onSwipeDown-Ereignis auf Google Glass mit einer nativen App?

Mit folgendem Code können Sie diese Ereignisse erfassen

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

ich zwei verschiedene Quellen für Gestenverarbeitung fand ich versucht:

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

Aber mit keinem von ihnen konnte ich das swipeDown Ereignis fangen.

Der Callback onFling() wird nur beim "Wischen vorwärts", "Wischen rückwärts" und "Wischen" aufgerufen, aber nie aufgerufen, wenn ich "wische".

Irgendwelche Hinweise oder haben Sie schon den Wischzettel abgefangen? Ich bin hier wirklich ratlos.

Antwort

9

Hier ist die (seltsame) Lösung.

Es scheint, dass die swipeDown Geste nicht wirklich eine Geste ist aber mehr eine Taste klicken.

Das bedeutet, dass Sie die Callback-Methoden Ihrer Aktivität verwenden sollten, um diese Ereignisse zu erfassen.

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

Ich glaube, Sie nicht über die onKeyDown() Rückruf kümmern müssen, weil dieser Rückruf nur direkt ausgelöst wird vor dem onKeyUp() Ereignis und nicht, wenn Sie die Geste beginnen.

0

Interessant Ich denke, das könnte eine Art Bug sein, zumindest mit XE12 installiert scheint mein Glas die Down Swipe Geste über eins von zehn mal zu fangen. Der tatsächliche Test, bei dem ich zählte, war 5, 15, 3 und 8 Aktivität onKeyUp bis GestureDetector.SimpleOnGestureListeneronFling.

Also fange ich beide und die gleiche Funktion in jedem.

0

Laut der GDK-Dokumentation wird dies so gemacht. Der Abwärtswischen übersetzt sich in KEYCODE_BACK.

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