こんにちは、KID.Aです。
今回はGoogle Glassでイベントの取得方法に関する記事を書きます。
イベント取得できれば、ユーザの操作を検知するアプリを作ることができます。
Google Glassでアプリを作る場合は、Android端末で作るアプリと異なり、ディスプレイのタッチがありません。代わりにタッチパッドを使用して、操作を行います。また、Google Glassはキャプチャーボタンなどのハードキーを持っています。
上記のイベントに関して、キーイベントとジェスチャーで取得する方法を説明していきます。
キーイベントを使用する
キーイベントは以下のように、定義されています。
KEYCODE_BACK | スワイプダウン |
---|---|
KEYCODE_CAMERA | キャプチャーボタン |
KEYCODE_DPAD_CENTER | タッチパッドをタップ |
実装方法
public class MyActivity extends Activity { ... @Override public boolean onKeyDown(int keycode, KeyEvent event) { if (keycode == KeyEvent.KEYCODE_DPAD_CENTER) { // タップ return true; } if (keycode == KeyEvent.KEYCODE_CAMERA) { // キャプチャーボタン return true; } if (keycode == KeyEvent.KEYCODE_BACK) { // 下スワイプ return true; } return super.onKeyDown(keycode, event); } }
onKeyDownをOverrideすると、keycodeに通知されます。
GestureDetectorを使用する
また、タッチパッドでダブルタップやスライドなどの細かいイベントを取得したい場合は、GestureDetectorを使用します。
実装方法
public class MainActivity extends Activity { private GestureDetector mGestureDetector; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); mGestureDetector = createGestureDetector(this); } private GestureDetector createGestureDetector(Context context) { GestureDetector gestureDetector = new GestureDetector(context); //Create a base listener for generic gestures gestureDetector.setBaseListener(new GestureDetector.BaseListener() { @Override public boolean onGesture(Gesture gesture) { if (gesture == Gesture.TAP) { // 1本の指でタップ return true; } else if (gesture == Gesture.TWO_TAP) { // 2本の指でタップ return true; } else if (gesture == Gesture.SWIPE_RIGHT) { // 右にスワイプ return true; } else if (gesture == Gesture.SWIPE_LEFT) { // 左にスワイプ return true; } return false; } }); gestureDetector.setFingerListener(new GestureDetector.FingerListener() { @Override public void onFingerCountChanged(int previousCount, int currentCount) { // タッチしている指の数が変わった場合に通知される } }); gestureDetector.setScrollListener(new GestureDetector.ScrollListener() { @Override public boolean onScroll(float displacement, float delta, float velocity) { // 横スクロール時に通知される return false; } }); return gestureDetector; } @Override public boolean onGenericMotionEvent(MotionEvent event) { if (mGestureDetector != null) { return mGestureDetector.onMotionEvent(event); } return false; } }
onGestureにはタップやスワイプのジェスチャーがGestureで取得できます。
onFingerCountChangedでは、タッチしている指の数が変わった場合に通知されます。
previousCountには変わる前のタッチしている指の本数、currentCountは変わった後の指の本数がきます。
setScrollListenerでは横スクロールされた場合に通知がきます。
displacementには初回タッチした位置からの移動したX軸の距離が返却されます。
deltaにはX軸の連続したモーションイベント間の差分が返却されます。
velocityには現在のX軸のモーションイベントの速さが返却されます。
以上、イベント取得の実装の際に参考にして頂けると幸いです。