Categories: Android

[안드로이드] Touch 이벤트의 ACTION 처리

 View의 setOnTouchListener 이벤트를 처리하고자 하는 경우 아래 함수로 이벤트를 받게 됩니다.

public boolean onTouch(View v, MotionEvent event) { }

 여기에서 View는 터치 이벤트를 받은 View를 의미하고 event에서는 어떠한 터치 이벤트가 발생했는지 정보를 얻을 수 있습니다.
자세한 것은 android.view.MotionEvent 소스를 보면 아실 수 있지만 getAction() 함수를 주로 사용합니다.Action 종류에는 아래와 같이 여러 가지가 존재합니다.

ACTION_MASK, ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_CANCEL, ACTION_OUTSIDE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_POINTER_INDEX_MASK

 자세한 것은 http://developer.android.com/reference/android/view/MotionEvent.html 페이지를 참고하시길 바랍니다.
위 Action 중에 View를 클릭했을 때는 ACTION_DOWN가 오고,  터치가 끝나서 손가락을 떼면 ACTION_UP이 오게 됩니다. 그 중간에는 ACTION_MOVE가 오게 됩니다.

 한가지 팁으로는 제 생각에 ACTION_DOWN 중에 View의 범위를 벗어나면 ACTION_OUTSIDE이나 ACTION_CANCEL이 와야 할텐데 이 부분이 호출이 되지 않는 문제가 생겼습니다. 그래서 ACTION_MOVE 이벤트 중에 view의 isPressed, isSelected 상태를 체크하여 isPressed가 true라면 아직 눌려있는 상태라서 범위를 벗어나지 않은 상태이고, false 라면 범위를 벗어난 것이라고 판단 하도록 처리하겠습니다. 이러한 처리는 버튼의 터치 이벤트를 처리할 때 간혹 필요한 부분이라고 생각이 됩니다.

dingpong

Recent Posts

LFS error at git checkout in Jenkins

Problem stdout: stderr: Downloading xxxx.a (83 MB) error: git-lfs smudge -- 'xxxx.a' died of signal…

3년 ago

플레이모빌 크리스마스 XXL 6629 산타 해외직구 구매가 배송비

https://www.playmobil.de/playmobil-xxl-weihnachtsmann/6629.html 구매가 : 48.49 유로 (플레이모빌 독일 홈페이지) 결제하는데 안되서 PayPal 로 결제하니 잘 잔행…

3년 ago

코카콜라 제로 355ml 72캔 구매가 (캔당 453원)

롯데온에서 355ml 24캔 롯데카드로 구매시 13,210원 https://www.lotteon.com/p/product/PD36294 APP으로 35,000원 이상 구매시 7,000 포인트 적립 행사…

4년 ago

경동나비엔 온수매트 EQM541-QS (퀸사이즈) 구입가

구입 매장 : 현대 홈쇼핑 (홈쇼핑 방송 중) 모바일 앱 http://www.hyundaihmall.com/front/pda/itemPtc.do?slitmCd=2114353981 최종 결제 가격 :…

4년 ago

PostMessage에 shared_ptr과 같은 스마트 포인터 넣기

PostMessage의 WPARAM 이나 LPARAM 으로 shared_ptr 와 같은 스마트 포인터 객체를 넘기고 싶은 경우가 있습니다.…

4년 ago

RC2255 – named STRINGTABLEs are not allowed

Visual Studio 에서 작업 중 이러한 컴파일 에러가 발생한 케이스가 있었습니다. 이 경우에는 .rc 파일에…

4년 ago