Touch Event 와 관련된 메소드는 dispatchTouchEvent, onTouchEvent 가 있다.
가장 최상위에 있는 dispatchTouchEvent가 호출이 되고, 해당 메소드는 하위의 dispatchTouchEvent를 호출한다.
예)
Activity
ViewGroup
View
이런식으로 되어있다고하면, Activity.dispatchTouchEvent -> ViewGroup.dispatchTouchEvent -> View.dispatchTouchEvent
이렇게 호출을 아래로 내려간다.
가장 최하위 View 의 dispatchTouchEvent 까지 도착하게 되면, 이때 View.onTouch , View.onTouchEvent 가 호출된다.
View.onTouch, onTouchEvent 에서 들어온 이벤트를 보고, 처리할지 말지를 판단한 후, 처리를 할거면 (intercept) return true.
처리하지 않을거면 return false 를 한다.
return 된 값은 View.dispatchTouchEvent 로 가게되고 여기서는 Touch 메소드로 부터 받은 리턴값을 그대로 리턴한다.
ViewGroup.dispatchTouchEvent 로 결과값이 넘어오면, 결과값이 true면 이미 View 쪽에서 이벤트가 처리되었음을 의미하기때문에
자신도 그대로 true를 리턴한다.
만약 View 에서 처리되지 않았다면, (return false) 자신의 onTouch, onTouchEvent로 이벤트를 보낸다.
[출처] : http://dktfrmaster.blogspot.kr/2016/09/blog-post_26.html
[안드로이드] 터치 이벤트 흐름
- 엑티비티에서 onTouchEvent 메서드 재정의
- 이벤트를 처리하고자 하는 뷰의 서브클래스에서 onTouchEvent 메서드 재정의
- 처리하고자 하는 뷰에 View.OnTouchListener 리스너 인터페이스를 등록
이벤트 처리의 흐름
엑티비티에서의 이벤트 처리
뷰에서의 이벤트 처리
Activity, ViewGroup, View 사이의 이벤트 처리
'Android' 카테고리의 다른 글
Android Drawing Process 1 (0) | 2019.04.15 |
---|---|
Android 그래픽 시스템의 발전 과정 (0) | 2017.12.19 |
Android Camera2 API Step By Step : Preview (0) | 2017.11.26 |
Async작업을 위한 handler, looper, Thread! (0) | 2017.10.25 |
안드로이드 기초 쌓기 - 해상도와 DP (0) | 2017.07.13 |