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