안드로이드 개발 아트 탐구 독서 노트(3장 View의 이벤트 시스템)

2959 단어

3.5View 슬라이딩 충돌


수평인지 세로로 미끄러지는지 누가 사건을 가로막았는지 어떻게 판단할 것인가.수평방향과 세로방향의 거리 차이나 수평방향과 세로방향의 속도에 따라 판단할 수 있다.
해결 방법 1.외부 차단법 클릭 이벤트는 모두 부모 용기의 차단 처리를 거쳐 부모 용기가 이 이벤트를 필요로 하면 차단하고 이 이벤트가 필요하지 않으면 차단하지 않습니다.외부 차단법은 부모 클래스의 onInterceptTouchEvent 방법을 다시 써야 합니다.그리고 주의해야 할 것은, ACTION에서DOWN에서 false를 반환합니다. ACTION을 차단하지 않습니다.DOWN 사건, 이 일은 ACTION을 차단하면DOWN 이벤트, 후속 이벤트는 모두 부류가 처리하여 하위 요소에 전달할 수 없습니다.그리고 ACTION에서...MOVE에서 차단 여부를 판단하고 마지막에 ACTIONUP에서 false를 반환합니다. ACTIONUP 이벤트는 의미가 없습니다.부모 컨테이너가 ACTION에 있는 경우UP에서 true를 반환하면 하위 요소가 ACTION을 수신하지 못합니다.UP 이벤트는 하위 요소의 onClick에서 수행할 수 없습니다.
2. 내부차단법 내부차단법은 부용기가 사건을 차단하지 않고 자원소에 맡겨 소비 여부를 판단하는 것을 말한다.하위 클래스의 dispatchTouchEvent를 다시 써야 합니다.그리고 부류도 기본적으로 차단 ACTIONDOWN 이외의 이벤트.이렇게 하면 하위 클래스가 RequestDisallowInterceptTouchEvent(false)를 호출할 때 부모 클래스가 필요한 이벤트를 계속 차단할 수 있습니다.
  @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        int action = event.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                getParent().requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_MOVE:
                if(       ){
                    getParent().requestDisallowInterceptTouchEvent(false);
                }
                break;
            case MotionEvent.ACTION_UP:
                break;

        }
        //       
        return super.dispatchTouchEvent(event);
    }

왜 아바타가 ACTION을 차단할 수 없습니까DOWN 사건은요, ACTION 때문에...DOWN 이벤트는 FLAG 을 받지 않습니다.DISALOW_INTERCEPT의 영향으로 상위 클래스가 ACTION을 차단하면DOWN 이벤트, 다음 이벤트는 하위 요소에 전달할 수 없습니다.
  @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if(ev.getAction() == MotionEvent.ACTION_DOWN){
            return false;//   ACTION_DOWN  
        }else{
            return true;
        }
    }

ListView가 꼭대기까지 미끄러졌는지 판단하려면 먼저 첫 번째 보이는 위치가 0인지 판단하고 이를 바탕으로 getTop이 0보다 크다고 판단한다.

좋은 웹페이지 즐겨찾기