코드 작성 중 간단한 예제를 저장해둡니다.
뷰의 터치가 되고 있는지 안 되고 있는지에 따라 동작하는 터치 리스너
[OnTouchListener]
구현
private View.OnTouchListener touchListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { // if pressed case MotionEvent.ACTION_DOWN: { /* 터치하고 있는 상태 */ break; } // if released case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: { /* 터치가 안 되고 있는 상태 */ break; } default: { break; } } return false; // false : 이 OnTouchListener 이후에도 // 다른 Listener들이 동작하게 함 // (OnClickListener 등등) } };
위에서 MotionEvent.ACTION_CANCEL 이걸 빼먹는 예제들이 있어서 뻘 고생 좀 했는데..
저 ACTION_CANCEL 을 추가해야 단순히 뷰 위에서만 터치가 떨어지는 것 뿐만이 아니라(ACTION_UP), 터치하던 중 드래그같은 동작으로 뷰 범위를 벗어나거나 하는 ‘터치 취소’의 경우(즉 우리가 인식하는 터치가 취소되었다 하는 모든 경우)도 모두 잡아내더군요.
부착
(리스너를 부착할 뷰 인스턴스).setOnTouchListener(touchListener);
이후 터치가 될 때마다 동작이 됩니다.