2011-08-04 4 views

답변

2

확인이 코드 조각 : 나는 새를 쓰기 때문에 (ScrollView의 dispatchTouchEvent를 무시)

public class yourScrollView extends ScrollView{ 

    //constructors and everything 
    //You might want to pass your GestureDetector (of course) 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev){ 
     super.dispatchTouchEvent(ev);  
     return myGestureDetector.onTouchEvent(ev); 
    } 
} 
+0

방금 ​​같은 활동에 넣었습니까? 나는 이것을 시도했지만 그것이 작동하지 않는 것 같아요. – chobo2

+0

아니요 'yourScrollView extends ScrollView' 클래스를 만들고이 코드를 –

+0

에 작성해야합니다. 그런 다음 xml 레이아웃의 ScrollView 대신 클래스를 사용합니까? – chobo2

4

당신이 맞습니다. ScrollView는 기능 상속 때문에 제스처를 "도용"합니다. 이전에 부모 뷰 대신 ScrollView 자체에 onTouchListener를 적용하여이 문제를 해결했습니다.

+0

어떻게하면됩니까? ScrollView가 ID를 던져 버린 것을 발견합니까? – chobo2

+2

예, 잠시 동안 검색 한 후에 ScrollView 개체를 잡고 setOnTouchListener() –

+0

을 사용하면이 문제에 가장 적합한 해결책입니다. – moonlightcheese

0

나는 대답을 말씀 드릴 수 없습니다. dispatchTouchEventScrollView으로 덮어 쓰는 것이 잘 작동하지만 제스처 처리기가 이어야하며super.dispatchTouchEvent 인 경우 이상한 방법으로 이벤트 좌표가 변경 될 수 있으므로이 작업을 수행해야합니다. 특히 뷰의 끝을지나 수직 스크롤 할 때 Y 값이 점프하는 것을 보았습니다. 스크롤 뷰 처리 전에 제스처 핸들러를 호출하면 내부 스크롤 된 좌표가 아닌 스크롤 뷰 좌표를 사용할 수 있습니다. 그래서

: 스크롤 뷰에서

public class yourScrollView extends ScrollView{ 

    //constructors and everything 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev){ 
     return myGestureDetector.onTouchEvent(ev) | super.dispatchTouchEvent(ev); 
    } 
} 

요소는 한 뷰가 스크롤 시작되지 않는 반응하지만, 제스처가 제대로 감지됩니다.

관련 문제