코드 작성 중 간단한 예제를 저장해둡니다.



뷰의 터치가 되고 있는지 안 되고 있는지에 따라 동작하는 터치 리스너




1. OnTouchListener 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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 등등)
    }
};
cs


위에서 MotionEvent.ACTION_CANCEL 이걸 빼먹는 예제들이 있어서 뻘 고생 좀 했는데..

저 ACTION_CANCEL 을 추가해야 단순히 뷰 위에서만 터치가 떨어지는 것 뿐만이 아니라(ACTION_UP), 터치하던 중 드래그같은 동작으로 뷰 범위를 벗어나거나 하는 '터치 취소'의 경우(즉 우리가 인식하는 터치가 취소되었다 하는 모든 경우)도 모두 잡아내더군요.




2. OnTouchListener 부착

1
(리스너를 부착할 뷰 인스턴스).setOnTouchListener(touchListener);
cs




이후 터치가 될 때마다 동작이 됩니다.


저작자 표시 비영리
신고

설정

트랙백

댓글