MotionEvent라는 클래스가 있다.

이 클래스에는 터치 관련된 상수들이 정의되어 있다.


이 중에서 여러 상수들이 정의돼 있지만 일단 내가 정확히 알고 있고 왠지 많이 쓰일 거 같은 거 3가지를 추려보자면...


ACTION_DOWN : 처음 눌렸을 때

ACTION_MOVE : 누르고 움직였을 때

ACTION_UP : 누른걸 땠을 때



MotionEvent를 사용할 수 있는 곳은


1. onTouchEvent


onTouchEvent는 화면을 터치하면 호출되는 콜백 메소드이다.

onTouchEvent는 인자로 MotionEvent를 가지고 있으니 매개변수에 getAction()메소드를 사용하여 MotionEvent 상수들과 비교하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public boolean onTouchEvent(MotionEvent event) {
 
    switch (event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
            textView.setText("ACTION_DOWN");
            return true;
 
        case MotionEvent.ACTION_MOVE:
            textView.setText("ACTION_MOVE");
            return true;
 
        case MotionEvent.ACTION_UP:
            textView.setText("ACTION_UP");
            return false;
    }
    return false;
}
cs



ACTION_DOWN과 ACTION_MOVE는 return true를 하고

ACTION_UP은 return false를 해야지 안전하다고 하는데 

return대신 break를 넣어도 나는 차이를 느낄 수 없었다.



2. 버튼의 리스너


버튼의 리스너로 등록가능하다.

onTouch에도 MotionEvent가 인자로 들어가니 1번 처럼 쓰면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
button = (Button)findViewById(R.id.button);
 
button.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                textView.setText("ACTION_DOWN");
                return true;
 
            case MotionEvent.ACTION_MOVE:
                textView.setText("ACTION_MOVE");
                return true;
 
            case MotionEvent.ACTION_UP:
                textView.setText("ACTION_UP");
                return false;
        }
        return false;
    }
});
 
cs






다른 사용방법이 있거나 내가 틀린 부분이 있겠지만 아무튼 다른 내용은 구글 디벨로퍼를 참고하자

https://developer.android.com/reference/android/view/MotionEvent.html


블로그 이미지

stuban

ㅇ.ㅇ

,