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

onTouch와 onLongClick

0 추천
onTouch와 onLongClick, onClick을 하나의 뷰에 모두 달아놓았는데,

onTouch에서 이벤트가 시작되면 up될 때까지 이벤트가 지속되는 방식입니다.

그 onTouch 이벤트가 시작된 후에는 계속 누르고 있어도 onLongClick가 시작되질 않는데

원래 두 리스너는 동시에 사용할 수 없는건가요.

아니면 onTouch에서 이벤트를 지속하고 있기 때문인가요.

 

후자라면 이벤트 중에도 onLongClick을 감지할 수 있는 방법이 있을까요.
appa (3,380 포인트) 님이 2013년 3월 19일 질문

2개의 답변

+2 추천
 
채택된 답변
윗분 말씀대로 터치 관련 이벤트들은 계층 형태로 이뤄져 있으며,

그 중 TouchListener 가 가장 상위 우선순위의 리스너 입니다.

TouchListener 에서 할일이 없다면 하위 이벤트 리스너들로 이벤트를 내려주는 방식이지요.

그렇기 때문에 신경쓰셔야 할부분이 onTouch 에서 "언제"  false/true 를 줘야 하는가 입니다.

만약 LongClick 이벤트 발생 조건이 터치지점에서 움직이지 않아야 한다고 가정한다면

onTouch 에서 down 지점과 move 지점 좌표를 계산해서 일정 범위로 넘어가는 순간 true 를 리턴해서 LongClick 이 발생하지 않도록 해야겠지요. (일정 범위로 계산하는 것은 가만히 있더라도 손가락의 미세한 움직임 필연적으로 발생하기 때문에 이를 보정하기위함 입니다.)

물론 LongClick 은 항상 true 로 설정해두셔야 하고요.
익명사용자 님이 2013년 3월 19일 답변
appa님이 2013년 3월 20일 채택됨
down시에 바로 true만 리턴해서 아래 리스너로 내려가지 않았던 거군요. 좋은 답변 감사합니다.
+1 추천
제가 알기론 아마 onTouch->onLongClick->onClick 순으로 호출 되는것으로 알고있는데.

onTouch에서 return true; 를 해버리면 그 뒤는 진행되지 않는 것으로 알고 잇습니다.

return false;로 해보시는것은 어떠실지요
안드로이드로우 (15,740 포인트) 님이 2013년 3월 19일 답변
...