반응형
어플은 사용자의 특정 움직임을 감지해서 이벤트가 발생하도록 만드는데 손가락으로 눌렀을때, 움직였을때, 손가락을 뗐을때 등 이런 여러가지 움직임을 감지하는 대표적인 인터페이스는 GestureDetector, OnTouchListener 입니다.
GestureDetector, OnTouchListener를 이용해서 화면을 터치 했을때 어떤식으로 이벤트를 감지하는지 view 두개를 생성하고 움직임이 감지되면 어떤 움직임이 감지되는지 textview에 띄워주도록 만들어보겠습니다.
1. activity_main.xml
<?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/view1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#C00000" />
<View
android:id="@+id/view2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0427EB" />
<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="wrap_content"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
2. MainActivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
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 view1 = findViewById(R.id.view1);
view1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float curX = event.getX();
float curY = event.getY();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:{
printS("손가락 눌림 : "+curX+", "+curY);
return true;
}
case MotionEvent.ACTION_MOVE:{
printS("손가락 움직임 : "+curX+", "+curY);
return true;
}
case MotionEvent.ACTION_UP:{
printS("손가락 뗌 : "+curX + ", "+curY);
return false;
}
default: return false;
}
}
});
detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
printS("onDown() 호출");
return true;
}
@Override
public void onShowPress(MotionEvent e) {
printS("onShowPress() 호출");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
printS("onSingleTapUp() 호출");
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
printS("onScroll() 호출 : "+distanceX + ", "+distanceY);
return true;
}
@Override
public void onLongPress(MotionEvent e) {
printS("onLongPress() 호출");
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
printS("onFling() 호출 : "+velocityX + ", " + velocityY);
return true;
}
});
View view2 = findViewById(R.id.view2);
view2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
});
}
public void printS(String s) {
textView.append(s+"\n");
}
}
view1(빨간색) - OnTouchListener를 이용하여 화면에 손가락이 닿았을때, 누른 상태에서 움직였을때, 손가락을 뗐을때를 감지
view2(파란색) - GestureDetector를 이용하여 좀더 세부적인 움직임을 감지
printS(String s)함수를 만들어서 텍스트뷰에 감지된 이벤트를 띄워주도록 했습니다.
해당코드를 작성하고 직접 실행해보면 어떤 움직임들을 감지 할 수 있는지 더 쉽게 이해하실 수 있습니다.
반응형
'안드로이드 > 코드' 카테고리의 다른 글
[안드로이드] Gson, SharedPreferences를 이용해서 클래스 저장하기 (0) | 2019.11.27 |
---|---|
[안드로이드] SharedPreferences를 이용해서 데이터를 저장해보자 (0) | 2019.11.26 |
[안드로이드] 볼륨키로 미디어 음량 조절하기 (0) | 2019.11.20 |
[안드로이드] 효과음 넣기 (SoundPool, AudioManager) (0) | 2019.11.19 |
[안드로이드] EditText 텍스트 변경시 이벤트 처리(TextWatcher) (0) | 2019.11.18 |