フリック操作を検出する方法
ユーザーによるフリック操作の検出と、その方向を検出する方法の例
変数の定義
private GestureDetector gestureDetector; private enum Type { UP, DOWN, RIGHT, LEFT, }
方向を表す上下左右の4種類の列挙型を定義します。
フリックの方向によって、これら4つの型の中からどれか一つを返します。
フリック検出のためのリスナーを宣言します
@Override public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); // GestureDetectorにイベントを渡すために必要です } private final GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener(){ @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Type type ; float startX = e1.getX(); float startY = e1.getY(); float nowX = e2.getX(); float nowY = e2.getY(); float absX = Math.abs(nowX - startX); float absY = Math.abs(nowY - startY); // フリック開始時のx,y座標、終了時のx,y座標を保持 // 指の移動距離の絶対値 if (absX + absY < 50 )return false; // 誤作動を防ぐため、移動距離が短い時は何もしない。調節してください if (absX > absY){ // 横方向の操作の場合 if (nowX - startX < 0) { type = Type.LEFT; } else { type = Type.RIGHT; } } else { // 縦方向の操作の場合 if (nowY - startY < 0) { type = Type.UP; } else { type = Type.DOWN; } } Log.d("hogehoge",type.toString()); // ログに方向を表示 return true; } };
コードの働きについては、アウトコメントをご参照ください。といっても、それほど難しいことはしていません。
typeの値によって、どの方向にフリックされたかが示されますので、その後の処理をわけてください。
余談ですが、hoge って何なんでしょう(笑)。アンドロイドの参考書や、技術ブログによく登場しますね。
ログに吐き出させるときは、めんどうなのでhogehogeとしていますが、まず他とかぶらないので結構便利な言葉かもしれません。