読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

スワイプのイベントを取得する

Android


android,source code,programming
上のサイトを参考にしました。


スワイプのイベントを取得するにはGestureDetectorを使います。


とりあえず、ソースコードを見てください。

public class MainActivity extends Activity {

    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;
    
    private GestureDetector mGestureDetector;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mGestureDetector = new GestureDetector(this, mOnGestureListener);
    }

    // これがないとGestureDetectorが動かない
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return mGestureDetector.onTouchEvent(event);
    }

    private final SimpleOnGestureListener mOnGestureListener = new SimpleOnGestureListener() {
        @Override
        public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {

            try {

                if (Math.abs(event1.getY() - event2.getY()) > SWIPE_MAX_OFF_PATH) {
                    // 縦の移動距離が大きすぎる場合は無視
                    return false;
                }

                if (event1.getX() - event2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    // 開始位置から終了位置の移動距離が指定値より大きい
                    // X軸の移動速度が指定値より大きい
                    Toast.makeText(MainActivity.this, "右から左", Toast.LENGTH_SHORT).show();

                } else if (event2.getX() - event1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    // 終了位置から開始位置の移動距離が指定値より大きい
                    // X軸の移動速度が指定値より大きい
                    Toast.makeText(MainActivity.this, "左から右", Toast.LENGTH_SHORT).show();
                }

            } catch (Exception e) {
                // nothing
            }
            return false;
        }
    };
}


onFlingというメソッドで判定しています。
コメントにも書いているとおり、移動距離・移動速度から判定しています。


思ったよりはシンプルに書くことが出来ますし、微調整も定数の値を変更すれば可能です。