제스처 이벤트 처리하기
제스처 이벤트는 터치 이벤트 중에서 스크롤 등을 구별한 후 알려주는 이벤트이다.
제스처 이벤트를 처리해주는 클래스는 GestureDetector이며,
객체를 만들고 터치 이벤트를 전달하면 GestureDectector 객체에서 각 상황에 맞는 메소드를 호출한다.
제스처 이벤트 만들기
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
public class MainActivity extends AppCompatActivity {
TextView textView;
GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
View view = findViewById(R.id.view);
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();
float curX = motionEvent.getX();
float curY = motionEvent.getY();
if (action == MotionEvent.ACTION_DOWN) {
println("손가락 눌림 : " + curX + ", " + curY);
} else if (action == MotionEvent.ACTION_MOVE) {
println("손가락 움직임 : " + curX + ", " + curY);
} else if (action == MotionEvent.ACTION_UP) {
println("손가락 뗌 : " + curX + ", " + curY);
}
return true;
}
});
detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent motionEvent) {
println("onDown() 호출됨.");
return true;
}
@Override
public void onShowPress(MotionEvent motionEvent) {
println("onShowPress() 호출됨.");
}
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
println("onSingleTapUp() 호출됨.");
return true;
}
@Override
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
println("onScroll() 호출됨 : " + v + ", " + v1);
return true;
}
@Override
public void onLongPress(MotionEvent motionEvent) {
println("onLongPress() 호출됨.");
}
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
println("onFling() 호출됨 : " + v + ", " + v1);
return true;
}
});
View view2 = findViewById(R.id.view2);
view2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
detector.onTouchEvent(motionEvent);
return true;
}
});
}
public void println(String data) {
textView.append(data + "\n");
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Toast.makeText(this, "시스템 [BACK] 버튼이 눌렸습니다.", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
}
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
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<View
android:id="@+id/view"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#8BC34A" />
<View
android:id="@+id/view2"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#FF9800" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</ScrollView>
</LinearLayout>
메서드 | 이벤트 유형 |
---|---|
onDown() | 화면이 눌림 |
onShowPress() | 화면이 눌렸다 떼어짐 |
onSingleTapUp() | 화면이 한 손가락으로 눌렸다 떼어짐 |
onSingleTapConfirmed() | 화면이 한 손가락으로 눌림 |
onDoubleTap() | 화면이 두 손가락으로 눌림 |
onScroll() | 화면이 눌린 채 일정 속도와 방향으로 움직임 |
onFling() | 화면이 눌린 채 가속도를 붙여 손가락을 움직였다 뗌 |
onLongPress() | 화면이 오랫동안 눌림 |