2015-02-02 2 views
1

나는 linearLayout을 확장하는 사용자 정의 ViewGroup이 있으며이보기 그룹에는 자식 뷰인 gridView가 있습니다. mGridView가 호출되고 실행 된 mGridView.onClickListener를 클릭하지만 내 사용자 정의보기 그룹 (onTouchEvent()가 실행 됨)에서 다른 터치 이벤트 (예 : mGridView 이동)를 처리하는 경우를 원합니다. 결코 호출되지부모보기에서 터치 처리하지만 자식에서 핸들 이벤트 처리

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 

    int action = ev.getAction(); 
    int y = (int) ev.getY(); 

    if(action == MotionEvent.ACTION_DOWN && y > mGridView.getTop()) //y > mGridView,getTop() checks if position of touch in mGridView Position or not. 
     return false; 

    return true; 

} 

하지만 mGridView.OnClickListener() : 그래서 내가 onInterceptTouchEvent를 ovveride.

답변

1

클릭 이벤트는 복합 이벤트이므로 MotionEvent.ACTION_DOWN만으로 구성되지는 않습니다.

MotionEvent.ACTION_DOWN이 있어야하며, 다른 여러 MotionEvent.ACTION_MOVE가 있어야하고 마지막으로 MotionEvent.ACTION_UP이 있어야하며이 모든 것은 클릭 한 뷰의 경계 안에 있어야합니다.

onInterceptTouchEvent (MotionEvent ev) 메서드 내에서 "false를 반환하도록"다른 MotionEvents를 정의해야합니다. 어쩌면 같은 : 당신은 아마 이미 읽은 this에서

if((action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_DOWNaction == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_UP) && y > mGridView.getTop()) 

아파트, 당신의보기 그러나 OnTouchListener 상에 OnClickListener를 사용하지 않는 시도 (그러나 정말 제시하지 않음) 또는 Detecting Common Gestures

를 살펴 . 현재 코드를 사용하면 MotionEvent.ACTION_DOWN을 반환해야합니다. 이제는 거짓이 반환됩니다.

+0

감사합니다. 어떤 동작이 올바른지 == MotionEvent.ACTION_DOWNaction == MotionEvent.ACTION_MOVE? – mk72

+0

클릭이 감지 되려면 몇 가지 작업이 함께 그룹화됩니다. 먼저 ACTION_CANCEL 다음 ACTION_UP을 제외한보기 범위 내의 모든 ACTION_DOWN 작업을 수행합니다. ACTION_UP에 ACTION_DOWN을 지정하면 클릭이 감지되고 OnClickListener가 작동한다고 생각합니다. –