이벤트 처리하기
모바일에서는 주로 손가락으로 화면을 터치하며, 그 순간 터치 이벤트(Touch Evnet)가 발생한다.
또한, 안드로이드 폰의 주요 이벤트로는 실제 버튼이나 소프트 키패드를 누르면 발생하는 KeyEvent도 있다.
그리고 소스 코드에서 클릭 이벤트를 처리하도록 하려면 버튼의 setOnClickListener 메서드를 이용해
리스너를 설정할 수 있습니다.
이와 같은 이벤트 처리 방식은 화면에서 발생하는 이벤트를 버튼과 같은 위젯 객체에 전달한 후
그 이후의 처리 과정을 버튼에 위임한다고 해서 위임 모델(Delegation Model) 이라고 부른다.
이렇게 하면 코드가 복잡해지지 않고 이벤트를 위젯마다 개별적으로 처리하는 객체 지향 코드를 만들 수 있다.
graph LR
B[public void onClick]-->|설정|A(Button 객체)
B-->|구현|C(OnClickListener 인터페이스)
1
2
3
boolean onTouchEvent(MotionEvent event)
boolean onKeyDown(int key, KeyEvent event)
boolean onKeyUP(int keyCode, keyEvent event)
기존의 뷰 객체에서 이벤트를 처리하려면 리스너를 설정하는 메소드를 호출해야 한다.
다음은 기존의 뷰 클래스를 그대로 사용하면서 그 객체에 설정하여 사용하는 메서드이며,
모두 리스너 인터페이스를 구현하도록 만들어져 있다.
1
2
3
4
View.OnTouchListener: boolean onTouch(View v, MotionEvent event)
View.OnKeyListener: boolean onKey (View v, int keyCode, KeyEvent event)
View.OnClickListenr: void onClick (View v)
View.OnFocusChangeListener : void onFocusChange(View v, boolean hasFoucus)
OnTouchListener는 버튼과 같은 객체에 자주 사용하고, OnClickListenr는 버튼 뿐만 아니라,
일반적인 뷰 객체에도 사용할 수 있다.
대표적인 이벤트 유형
속성 | 설명 |
---|---|
터치 이벤트 | 화면을 손가락으로 누를 때 발생하는 이벤트 |
키 이벤트 | 키 패드나 하드웨어 버튼을 누를 때 발생하는 이벤트 |
제스처 이벤트 | 터치 이벤트 중에서 스크롤과 같이 일정 패턴으로 구분되는 이벤트 |
포커스 | 뷰 마다 순서대로 주어지는 포커스 |
화면 방향 변경 | 화면의 방향이 가로와 세로로 바뀜에 따라 발생하는 이벤트 |
제스처 이벤트 유형
메서드 | 이벤트 유형 |
---|---|
onDown() | 화면이 눌림 |
onShowPress() | 화면이 눌렸다 떼어짐 |
onSingleTapUp() | 화면이 한 손가락으로 눌렸다 떼어짐 |
onSingleTapConfirmed() | 화면이 한 손가락으로 눌림 |
onDoubleTap() | 화면이 두 손가락으로 눌림 |
onScroll() | 화면이 눌린 채 일정 속도와 방향으로 움직임 |
onFling() | 화면이 눌린 채 가속도를 붙여 손가락을 움직였다 뗌 |
onLongPress() | 화면이 오랫동안 눌림 |