티스토리 뷰
Computer/Android
[Android] Touch, onInterceptTouchEvent, dispatchTouchEvent
jamezc 2020. 2. 24. 01:45onInterceptTouchEvent, dispatchTouchEvent
- onTouchEvent에서 View/ViewGroup 또는 해당 하위 항목이 true를 반환하지 않으면 MotionEvent.ACTION_DOWN에 대해서만 dispatchTouchEvent 및 onInterceptTouchEvent이 (가) 호출됩니다. onTouchEvent에서 true가 없으면 상위 뷰는 뷰에 MotionEvents가 필요하지 않다고 가정합니다.
- OnTouchEvent에서 ViewGroup의 자식 중 어느 것도 true를 반환하지 않으면 onTouchEvent에서 ViewGroup이 true를 반환하더라도 MotionEvent.ACTION_DOWN에 대해서만 onInterceptTouchEvent가 호출됩니다.
처리 순서는 다음과 같습니다.
- dispatchTouchEvent이 (가) 호출되었습니다.
- onInterceptTouchEvent은 (는) MotionEvent.ACTION_DOWN 또는 ViewGroup의 자식 중 하나가 onTouchEvent에서 true를 반환 할 때 호출됩니다.
- onTouchEvent은 ViewGroup의 자식에서 처음 호출되며 자식이 true를 반환하지 않으면 View/ViewGroup에서 호출됩니다.
자녀의 이벤트를 비활성화하지 않고 TouchEvents/MotionEvents을 (를) 미리 보려면 두 가지 작업을 수행해야합니다.
- dispatchTouchEvent을 재정 의하여 이벤트를 미리보고 super.dispatchTouchEvent(ev);
- onTouchEvent을 (를) 재정의하고 true를 반환합니다. 그렇지 않으면 MotionEvent.ACTION_DOWN을 (를) 제외한 MotionEvent을 얻을 수 없습니다.
제스처를 감지하지 않는 한 자녀의 다른 이벤트를 비활성화하지 않고 스 와이프 이벤트와 같은 제스처를 감지하려는 경우 다음과 같이 할 수 있습니다.
- 위에서 설명한대로 MotionEvents를 미리보고 제스처를 감지하면 플래그를 설정하십시오.
- 자녀가 모션 이벤트 처리를 취소하도록 플래그를 설정하면 onInterceptTouchEvent에서 true를 반환합니다. 다음 MotionEvent.ACTION_DOWN까지 onInterceptTouchEvent가 다시 호출되지 않기 때문에 플래그를 재설정하기 편리한 위치이기도합니다.
'Computer > Android' 카테고리의 다른 글
[Android] OnClickListener로 Parameter 전달 (0) | 2020.02.27 |
---|---|
[Android] 안드로이드 애니메이션(Animation) 효과 주기 (0) | 2020.02.26 |
[Android] View, ViewGroup (0) | 2020.02.24 |
[Android] SurfaceView xml 에 추가하고 배경 투명 (0) | 2020.02.18 |
[Android] SurfaceView 기본 (0) | 2020.02.18 |
댓글