마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

dispatchTouchEvent 질문드립니다.

0 추천

안녕하세요.

 

소스코드를 분석하는 중인데...

 

Activity에서 dispatchTouchEvent 함수에서 처리를 왜 아래와같이 하는지 이해가 가지 않습니다..

 

멀티터치일 때는 false, 아닐때는 부모 호출?...

 

조언부탁드립니다..

 

감사합니다.

 

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (VRUtil.isMultiTouch(ev)) {
            return false;
        } else {
            return super.dispatchTouchEvent(ev);
        }
    }

 

apcnic (1,420 포인트) 님이 2013년 6월 10일 질문

1개의 답변

+1 추천
 
채택된 답변
소스만 봐서는

멀티터치일때는 반응이 없게(무시) 처리했구요

그외의 경우에는 super를 호출했으니 일반적인 시스템 처리루틴을 타겠네요
그후최초 (2,980 포인트) 님이 2013년 6월 10일 답변
apcnic님이 2013년 6월 10일 채택됨
true를 반환해야 무시 아닌가요?

제가 잘 몰라서..
웁스 죄송합니다. apcnic님 말씀이 맞습니다.
false를 할경우 다음 우선순위의 dispatchTouchEvent가 호출되는게 맞습니다.
true를 할 경우 무시가 맞구요.

다시 소스를 보면

멀티터치일때는 다음 우선순위의 dispatchTouchEvent를 호출했고

그외의 경우에는 super를 호출했으니 부모를 호출하거나 바로 안드로이드 메소드를 오버라이드 한 경우라면 일반적인 시스템 처리루틴을 탄다. 가 맞네요
false를 했을 때는 다음 우선순위 함수가 호출되고,
super를 했을 때는 부모를 호출한다면,

둘의 경우 차이점이 무엇이 있을까요?...
동일한 소스에
액티비티 안에 TouchEvent가 있고
액티비티안의 뷰 안에 TouchEvent가 있다고 생각해보시면 간단합니다.
터치 이벤트가 입력이 되었을 때 당연히 뷰안의 TouchEvent가 실행되겠지요?
만약 여기서 false를 던졌다면 액티비티 TouchEvent가 호출됩니다.
하지만 super를 호출한다면 오버로드한 parent TouchEvent가 호출이 되겠지요.
이 차이 입니다.
...