View관련
2019. 10. 25. 14:24ㆍ모바일/Android_Java
onInterceptTouchEvent
특정 이벤트를 특정 뷰에서 처리완료 후, 더이상 상위 뷰에게 이벤트가 처리되지 않게 하고싶을 때 true로 설정한다.
뷰 터치시 상위 뷰부터 하위뷰로 터치 전달
뷰페이저안에 리사이클러뷰가 있는경우 Drag시 true로 이벤트 전달하고 아닐경유 하위뷰(리사이클러뷰)에게 false로 이벤트 전달하여 아이템선택되게 만듦
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { final int action = ev.getAction() & MotionEventCompat.ACTION_MASK; switch (action){ case MotionEvent.ACTION_DOWN: preX = ev.getX(); break; case MotionEvent.ACTION_MOVE: float x = ev.getX(); if((x - OFF_SET <= preX && preX <= x+ OFF_SET)){ return false; }else{ return true; } } return super.onInterceptTouchEvent(ev); } 출처: [https://iw90.tistory.com/238](https://iw90.tistory.com/238) \[woong's\]
dispatchTouchEvent
- 디바이스 터치정보 -> 윈도우매니저 -> 앱 전달
- 이벤트는 최상단뷰부터 아래로(계층구조)전달
- 이벤트 발생시 각 레이어의 dispatchTouchEvent호출
- 하위레이어의 dispatchTouchEvent호출하고 하위레이어가 터치 이벤트를 처리했는지 결과를 받아서 처리하지 않았을경우, 자기 자신의 이벤트 처리메서드(onTouch, onTouchEvent)로 이벤트 보냄 그리고 이벤트 처리여부를 상위 dispatchTouchEvent로 리턴
- 아무튼 이 녀석으로부터 시작해서 child 의 dispatchTouchEvent(event) 를 호출하고, 그 child 의 child 의 dispatchTouchEvent(event)를 호출하고, 또 그 child의 child 의 child 의 dispatchTouchEvent(event)를 호출한다. 이런 식으로 쭉 밑으로 내려 가다보면, View 의 dispatchTouchEvent(event) 로 가게 되고, 여기서 최종적으로 View 의 OnTouchEvent() 를 호출하게 된다.
'모바일 > Android_Java' 카테고리의 다른 글
Static (0) | 2019.10.30 |
---|---|
테마관련 (0) | 2019.10.28 |
가로,세로화면(Configuration.ORIENTATION_PORTRAIT) (0) | 2019.10.24 |
ColorDrawable (0) | 2019.10.23 |
savedInstanceState (0) | 2019.10.17 |