안드로이드 제스처 이벤트 (GestureDetector) 예제

반응형

화면을 손으로 드래그시 이동 방향에 따라 이벤트가 발생하도록 하는 것이 제스처 이벤트 입니다.

아래 java 파일을 만들고 사용하고자 하는곳에서 불러오면 됩니다.



OnSwipeTouchListener.java


import android.content.Context;

import android.view.GestureDetector;

import android.view.GestureDetector.SimpleOnGestureListener;

import android.view.MotionEvent; import android.view.View;

import android.view.View.OnTouchListener;


public class OnSwipeTouchListener implements OnTouchListener {

    private final GestureDetector gestureDetector;

    public OnSwipeTouchListener (Context ctx){

        gestureDetector = new GestureDetector(ctx, new GestureListener());

    }


    @Override

    public boolean onTouch(View v, MotionEvent event) {

        return gestureDetector.onTouchEvent(event);

    }


    private final class GestureListener extends SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 100;

        private static final int SWIPE_VELOCITY_THRESHOLD = 100;


        @Override

        public boolean onDown(MotionEvent e) {

            return true;

        }


        @Override

        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

            boolean result = false;

            try {

                float diffY = e2.getY() - e1.getY();

                float diffX = e2.getX() - e1.getX();

                if (Math.abs(diffX) > Math.abs(diffY)) {

                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {

                        if (diffX > 0) {

                            onSwipeRight();

                        } else {

                            onSwipeLeft();

                        }

                    }

                    result = true;

                } else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {

                    if (diffY > 0) {

                        onSwipeBottom();

                    } else {

                        onSwipeTop();

                    }

                }

                result = true;

            } catch (Exception exception) {

                exception.printStackTrace();

            }

            return result;

        }

    }


    public void onSwipeRight() { }


    public void onSwipeLeft() { }


    public void onSwipeTop() { }


    public void onSwipeBottom() { }


}



필요한 Activity 에서 아래 코드를 이용해 사용 합니다.


View v_swipe = (View) findViewById(R.id.v_swipe);


v_swipe.setOnTouchListener(new OnSwipeTouchListener(DetailsActivity.this) {

            public void onSwipeRight() {

                // 왼쪽에서 오른쪽으로 제스쳐 사용시 동작할 코드 넣기

            }

            public void onSwipeLeft() {

                // 오른쪽에서 왼쪽으로 제스쳐 사용시 동작할 코드 넣기

            }

            public void onSwipeTop() {

                // 아래에서 위쪽으로 제스쳐 사용시 동작할 코드 넣기

            }

            public void onSwipeBottom {

                // 위에서 아래쪽으로 제스쳐 사용시 동작할 코드 넣기

            }

        }); 



반응형

댓글()