寒川アクアブログ

美容師しながらアプリ開発していて水草が趣味の私のブログです

フリック操作を検出する方法

ユーザーによるフリック操作の検出と、その方向を検出する方法の例

変数の定義
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としていますが、まず他とかぶらないので結構便利な言葉かもしれません。