[안드로이드] 안드로이드스튜디오(Android Studio) 다양한 터치(touch)를 감지하는 방법
(onDown,onFling,onLongPress,onScroll,onShowPress,onSingleTapUp,onDoubleTap,onDoubleTapEvent,onSingleTapConfirmed), 안드로이드 예제, 안드로이드 강좌
참고 : 이미지서명은 제 와이프 블로그 이미지서명입니다.
안녕하세요 정보처리마법사입니다.
이번 포스팅의 주제는 다양한 터치를 감지하는 방법에 관한 내용입니다.
안드로이드는 다양한 터치 이벤트 처리를 지원하기 위해 두 개의 인터페이스를 제공하고 있습니다.
GestureDetector.OnDoubleTapListener : 두 번 터치와 관련된 리스너
GetstureDetector.OnGestureListener : 다양한 화면 터치 이벤트를 처리하는 리스너
이러한 리스너 인터페이스를 구현해서 원하는 이벤트 처리를 하거나 두개의 리스너를 이미 구현해놓은
GestureDetector.SimpleOnGestureListener 클래스를 사용해서 원하는 처리를 할 수도 있습니다.
android.view.GestureDetector.OnGestureListener 인터페이스의 메소드
abstract boolean onDown(MotionEvent e) : 화면을 터치 다운(down) 했을 때 호출됩니다.
abstract boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
: 화면을 살짝 팅길 때, 즉 터치다운하고 터치업할때 호출됩니다.
abstract boolean onLongPress(MotionEvent e) : 화면을 길게 터치했을 때 호출됩니다.
abstract boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
: 화면을 스크롤할 때, 즉 터치 다운하고 이동할 때 호출됩니다.
abstract boolean onShowPress(MotionEvent e)
: 화면을 터치하고 떼지 않았을 때, 즉 터치다운하고 이동과 업 이벤트가 발생하지 않았을 때 호출됩니다.
abstract boolean onSingleTapUp(MotionEvent e) : 화면을 터치하고 뗄 때, 즉 터치업할 때 호출됩니다.
android.view.GestureDetector.OnDoubleTapListener 인터페이스의 메소드
abstract boolean onDoubleTap(MotionEvent e) : 터치가 두 번 일어났을 때 호출됩니다.
abstract boolean onDoubleTapEvent(MotionEvent e) : 터치가 두 번 일어났을 때 호출되며, 터치다운, 이동, 업 이벤트를 모두 포함합니다.
abstract boolean onSingleTapConfirmed(MotionEvent e) : 터치가 한 번 일어났을 때 호출됩니다. 이 메소드가 onSingleTapUp(MotionEvent)와 다른 점은 두 번째 터치가 일어나지 않았을 때만 호출된다는 점입니다.
한번의 터치에 무조건 하나의 이벤트가 발생되는 것은 아닙니다. 설령 살짝 터치를 했더라도 onDown(), onSingleTapUp(), onSingleTapConfirmed() 메소드가 연속해서 호출됩니다. 그래서 길게 눌렀을 때와 스크롤할 때의 호출 메소드가 서로 다릅니다.
일단 소스코드로 한번 쭉 훑어보고 실제 제스쳐와 터치를 했을 때 어떤 메소드가 호출이 되는지 살펴보겠습니다.
위 전체 소스코드 중 특별한 로직이 들어간 곳은 없고 단순히 Log를 남기는 기능 밖에 없습니다. 일단 추후에 애플리케이션을 실행을 해서 로그캣으로 살펴보면 되겠습니다. 레이아웃은 Default 로 아무것도 수정하지 않았습니다. 즉 Hello World 입니다.
저는 아이폰을 사용하고 있기에 서랍속에 모셔둔 해방전 베가레이서1을 고이 꺼내어서 디바이스 테스트를 하겠습니다.
오른쪽에 작은 글씨들은 개발자 디버깅모드 옵션이기 때문에 신경 쓰지 않으셔도 됩니다. 실행을 하면 역시 그냥 기본 Hello world 말고는 화면에는 아무런 변화가 없는 게 당연합니다.
사용자 동작에 따라 호출되는 터치 이벤트 순서를 알아보기 위에 살짝 터치를 해보았습니다.
위 이미지처럼 onDown -> onSingleTapUp -> onSingleTapConfirmed 가 순서대로 호출이 됩니다.
그리고 나서 바로 다른동작을 취하면 볼 수는 있겠지만 좀 어지럽기 때문에 로그캣화면 아무곳에서 마우스 우클릭을해서 Clear All 을해서 스크린을 클리어 하겠습니다.
자 깨끗해졌습니다. 계속해서 다음 동작을 해보겠습니다.
이번엔 약간 길게 터치를 해 보았습니다. onDown -> onShowPress -> onSingleTapUp 순서대로 호출이 됩니다.
이번엔 길게 터치를 해보았습니다. onDown -> onShowPress -> onLongPress 메소드 순으로 호출이 됩니다.
그리고 이번엔 두 번 터치를 해봤습니다. onDown -> onSingleTapUp -> onDoubleTap -> onDoubleTapEvent -> onDown -> onDoubleTapEvent 메소드 순서대로 호출이 되는군요.
이번엔 화면을 스크롤을 살짝 해봤습니다. 화면을 살짝 드래그 할 때 발생하는 이벤트 순서입니다. 화면을 누른 시간이 매우 짧을 경우에는 onShowPress가 호출이 되지 않을 수 도 있습니다. 참고하시기 바랍니다.
onDown -> onShowPress -> onScroll 순으로 메소드가 호출이 됩니다.
이번엔 플링을 해보았습니다. 화면을 스크롤 동작을 취하면서 살짝 튕겨 줄 때 발생하는 이벤트 입니다. 플링도 마찬가지로 화면을 누른 시간이 매우 짧을 경우에는 onShowPress가 호출되지 않을 수 도 있습니다.
onDown -> onShowPress -> onScroll -> onFling 메소드 순으로 호출이 됩니다.
이상으로 포스팅을 마칩니다. 감사합니다.
참고서적 : 200개의 단계별 예제로 배우는 안드로이드 4.0 [제이펍]
Fin.
잘 못 된 정보가 있으면 말씀해주세요~
공감버튼 클릭은 작성자에게 큰 힘이 됩니다. 행복한 하루 되세요.