우동우동우's note

Disallow Intercept Touch Event 본문

Java & Android

Disallow Intercept Touch Event

우동우동우 2013. 2. 13. 00:40

간혹 가다가 세로 스크롤과 가로 스크롤이 동시에 나와야하는 뷰들이 있다. 이러한 상화에서는 상위 뷰에 터치 인터셉트를 하지말라고 요청해야 한다. 

요청 방법은 간단한다. 

View.OnTouchListener에 다음의 코드를 넣으면 된다.

parent에 requestDisallowInterceptTouchEvent()함수를 불러와서 parent 뷰에게 스크롤을 멈추게 하는 것이다. 


	@Override
	public boolean onTouch(View v, MotionEvent event) {
		int action = event.getAction();
		switch (action) {
		case MotionEvent.ACTION_DOWN:
			// Disallow ScrollView to intercept touch events.
			v.getParent().requestDisallowInterceptTouchEvent(true);
			break;

		case MotionEvent.ACTION_UP:
			// Allow ScrollView to intercept touch events.
			v.getParent().requestDisallowInterceptTouchEvent(false);
			break;
		}
		return v.onTouchEvent(event);
	}


위 코드는 아주 간단하게 작성이 된 것이라 특정 뷰를 클릭했을 때  parent의 스크롤 기능이 먹통이 되게 된다. 만약 먹통이 되는 것을 막고 싶다면 스크롤 방향에 대해서 detection을 해야하고, 그때 requestDisallowInterceptTouchEvent()를 풀어주고, 처음에 선택된 뷰의 위치를 다시 지정하고, 등등의 여러 수고가 필요하다... 

나중에 한번 시도 해봐야지...

Comments