이벤트

·2021년 10월 14일
1

안드로이드

목록 보기
5/17

터치 이벤트

안드로이드는 이벤트 기반의 프로그래밍을 제공함
이벤트 기반이란? 어떤 사건에 따라 제어 흐름이 결정되어 동작을 처리함
이벤트란? 디바이스가 감지한 유의미한 사건들

터치 이벤트 전달 과정

  1. 터치 이벤트 발생
  2. 터치 발생 영역에 해당하는 뷰를 최상단 루트 뷰부터 하위로 찾아나간다.
  3. 터치 영역에 해당하는 뷰가 버튼 뷰임을 확인한다.
  4. 버튼에 이벤트가 전달되고 버튼을 누른 효과를 나타낸다.

터치 이벤트 수신 함수

화면 터치후에 먼저 dispatchTouchEvent 함수가 호출됨. 바로 이어서 onTouchEvent 함수가 호출됨
터치 이벤트는 액티비티, 뷰그룹, 뷰 모두 가지고 있다.


1. 액티비티의 dispatchTouchEvent 호출, 이 함수는 터치 영역에 있는 뷰그룹의 dispatchTouchEvent 호출
2. 뷰그룹의 dispatchTouchEvent는 터치 영역에 있는 자식뷰의 dispatchTouchEvent 호출
3. 뷰의 dispatchTouchEvent 호출은 이벤트 전달의 목적임. onTouchEvent를 호출
4. 호출된 뷰의 onTouchEvent가 처리할 일이 없다면 false를 리턴. false 리턴은 이벤트를 소비하지 않음을 의미. false를 받은 뷰의 dispatchTouchEvent 자신도 false를 뷰그룹으로 리턴
5,6,7. 뷰그룹의 dispatchTouchEvent가 onTouchEvent 호출. 이벤트를 소비하고 true 반환
8,9. 액티비티의 dispatchTouchEvent는 true를 반환받고, onTouchEvent를 호출하지 않음

즉, dispatchTouchEvent는 하위 계층에게 touch event를 전달해주는 함수이고, ontouchEvent는 이벤트를 처리하는 함수라고 볼 수 있다.

터치 이벤트 리스너

터치 이벤트를 받기 위해서는 늘 뷰를 상속받아 재정의해야만 한다. 매우 불편하고 번거롭다
터치 이벤트 리스너란?
onTouchEvent 재정의 없이 사용하기 때문에 간편하게 터치 이벤트를 전달 받는다.

1. 뷰/뷰그룹은 dispatchTouchEvent 내에서 onTouchEvent 함수 호춣하지만, 터치 이벤트리스너가 등록되어 있으면, onTouchEvent 대신 리스너를 호출한다.
2. View 내에 onTouchListener 인터페이스는 내부의 onTouch 함수를 재정의 해야한다.
3. 재정의된 onTouch의 리턴값이 true면, 이벤트를 소비하고 그렇지 않으면 onTouchEvent를 호출한다.

구현방법

내부 클래스에 onTouchListener를 구현하는 방법

View.OnTouchListener를 액티비티가 상속받아 구현하는 방법

익명의 내부함수를 구현하는 방법

클릭 리스너

가장 많이 사용되는 이벤트 조합인 클릭은 뷰 내부에서 확장된 이벤트 리스너로 제공한다.
클릭 : 손가락을 눌렀다(ACTION_DOWN) 바로 뗴는 (ACTION_UP)의 터치 동작을 가진다

안드로이드에 제공하는 쉽게 구현하는 방법

한개 클릭 핸들러로 다중 버튼클릭 이벤트 처리 방법

롱클릭 리스너

500ms 이상 누르고 있을때 발생하는 이벤트를 처리한다.

키 이벤트

키보드의 키를 누를 때 발생하는 이벤트

포커스

키 이벤트를 전달받을 수 있음을 나타내는 시각적인 표시, 키 이벤트를 받는 기준이 된다.
한 화면에 배치된 모든 뷰는 포커스를 가질 수 있지만, 동시에 여러 개의 뷰가 포커스를 가질 수는 없다.

onBackPressed 재정의 함수

안드로이드에서는 이전 키가 이전 액티비티 혹은 앱의 종료를 의미한다.
기본 동작 : 앱이 종료됨
재정의함으로써 실수로 눌려져서 앱의 종료됨을 막을 수 있다.
onBackPressed 재정의 함수는 액티비티만 지원한다.

키 이벤트 리스너

1. 액티비티는 OnKeyListener를 상속받는다.
2. 내부 함수로 OnKey함수를 오버라이드 한다.
3. Oncreate함수 안에 setOnKeyListener를 객체 자신으로 설정한다.

profile

0개의 댓글