안녕하세요...
ScrollView위젯에 RelativeLayout을 깔고 RelativeLayout에 Touch사건을 추가하려고 합니다ㅠㅠ.
MotionEvent.ACTION_DOWN사건은 잡히는데 ACTION_MOVE는 안잡히네요.
ScrollView위젯에서 ACTION_MOVE사건을 막아주면 될듯한데 방법좀 가르쳐주세요...
단 shortTouch후의 move사건은 scrollView에 주고, longTouch후의 move사건은 relativeLayout에 잡혀야합니다.
고수님들 도와주세요ㅠㅠ.
ScrollView가 터치이벤트를 도중에 가로채기때문에 해당 문제가 발생하는건데
터치이벤트를 가로 채는 이벤트 메서드가 onInterceptorTouchEvent(MotionEvent) 입니다. 이 메서드는
boolean 값을 리턴하는데 이 리턴하는 boolean 값이 true일 경우에 자식뷰로 이벤트를 넘기지 않고
ScrollView 스스로가 onTouchEvent로 터치이벤트를 넘겨서 직접 스크롤에 관여합니다.
제가 두가지 방법을 생각해봤는데 (실험을 거친건 아닙니다.) ScrollView를 직접 extends 하여 LongPress시
플래그값을 둔다음 onInterceptorTouchEvent의 리턴값을 false로 보내주어 자식뷰에세 터치 이벤트를 받게
하는 방법이 있을것이고 또 한가지는 ScrollView의 작동 매커니즘을 보면 세로로 스크롤이라고 판단할만큼의
ACTION_MOVE가 일어나게 되면 플래그가 스크롤로 바뀌면서 ACTION_UP | ACTION_CANCEL이 일어나기
전까지 onInterceptorTouchEvent()가 true를 리턴시켜 ScrollView만 터치이벤트를 처리하겠금 만들어 놨는데요
이런 작동구조를 바탕으로 RelativeLayout이 LongPress를 받으면 터치이벤를 부모쪽으로 넘기지 말고 스스로
처리하겠금 만드는 방법이 있습니다.
위의 두가지 방법을 실험 해보지 않아 확신을 드릴 수 없지만 터치 이벤트를 통해 원하는 뷰를 컨트롤하는 방법은 onInterceptorTouchEvent()와 onTouchEvent()가 리턴하는 boolean 값이 자식뷰나 부모뷰에 어떤 영향을 미치는지
정확히알고 코드를 작성하는 것입니다.