티스토리 뷰

반응형

뷰의 터치 이벤트 처리방법 3가지

- 액티비티에서 onTouchEvent 메서드 재정의

- 이벤트 처리하는 뷰 서브클래스에서 onTouchEvent 메서드 재정의

- 처리하고자 하는 뷰에 View.OnTouchListener 리스너 인터페이스를 등록

 

* 이벤트 처리의 흐름

- 액티비티에서의 이벤트 처리

액티비티 >> onTouchEvent 메서드를 재정의 >> 모든 뷰의 터치이벤트를 받을 수 있음

 

- 뷰에서 이벤트 처리

onTouchEvent 메서드를 재정의 >> 상속, 서브클래스 = 번거로움

 

or 

 

OnTouchListener 인터페이스를 등록 >> 인터페이스를 구현한 메서드에서 터치이벤트를 받음, 상속 x

 

>>> 해당 뷰의 이벤트만 처리

 

- 2가지 다 구현되어 있다면?

OnTouchListener의 메서드(onTouch) >> onTouchEvent 순서로 호출

onTouch 메서드가 true를 리턴? >> onTouchEvent는 이벤트를 받지 못함

 

 

Activity(dispatchTouchEvent)              : 하위 dispatchTouchEvent 호출
 
  ViewGroup(dispatchTouchEvent)       : onInterceptTouchEvent 호출
 
    ViewGroup(onInterceptTouchEvent) : 하위 dispatchTouchEvent 호출
    View(dispatchTouchEvent)              : 자신의 이벤트 핸들러 메서드 호출
 
      View(onTouch)                           : 이벤트 처리 & 처리여부 리턴
      View(onTouchEvent)                    : 이벤트 처리 & 처리여부 리턴
 
    View(dispatchTouchEvent)              : 자신의 이벤트 핸들러 메서드의 결과값을 리턴
    ViewGroup(onTouch)                     : 이벤트 처리 & 처리여부 리턴
    ViewGroup(onTouchEvent)             : 이벤트 처리 & 처리여부 리턴
 
  ViewGroup(dispatchTouchEvent)       : 자신 or 하위 레이어의 결과값을 리턴
 
  Activity(onTouchEvent)                    : 이벤트 처리 & 처리여부 리턴
 
Activity(dispatchTouchEvent)              : 자신 or 하위 레이어의 결과값을 리턴
 
 
 
 
- Aictivity/ViewGroup/View는 모두 dispatchTouchEventonTouchEvent 메서드를 가짐
 
- ViewGroup에는 추가적으로 onInterceptTouchEvent 메서드를 가짐
 
- 이벤트가 발생하면 각 레이어의 dispatchTouchEvent가 가장 먼저 호출 >>
  dispatchTouchEvent는 하위 레이어의 dispatchTouchEvent를 호출
 
  하위 레이어가 터치 이벤트를 처리했는지 결과를 받아서 처리하지 않은 경우 >>
 자기 자신의 이벤트 처리 메서드(onTouch, onTouchEvent) 메서드로 이벤트를 보냄 >>
 이벤트 처리 여부를 상위 dispatchTouchEvent에 리턴
 
- onInterceptTouchEvent는 ViewGroup의 dispatchTouchEvent의 로직을 대신 담당하여, 자신에게 속한 하위뷰에게 이벤트를 전달할지 결정한다.
 
- 모든 메서드는 리턴값이 boolean형인데 true일 경우 이벤트를 처리했음을 의미하고, false일 경우 이벤트가 처리되지 않았음을 의미한다.

 

 

* onInterceptTouchEvent

- true : 이벤트를 가져옴

- false : 하위 View로 이벤트를 전달

 

 

 

* 참조

http://dktfrmaster.blogspot.com/2016/09/blog-post_26.html

https://iw90.tistory.com/238

 

 

 

 

 

반응형

'Android > Java' 카테고리의 다른 글

[Android] DataBinding 사용법 / 개요  (0) 2019.04.08
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함