오늘이라도
[Android] 14. 터치 좌표 출력(setOnTouchListener), 터치 제스쳐 감지(GestureDetector), 조작키 감지(onKeyDown) 본문
취업성공패키지 SW 개발자 교육/Android
[Android] 14. 터치 좌표 출력(setOnTouchListener), 터치 제스쳐 감지(GestureDetector), 조작키 감지(onKeyDown)
upcake_ 2020. 5. 25. 18:19반응형
https://github.com/upcake/Class_Examples
교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다.
gif 파일은 클릭해서 보는 것이 정확합니다.
▼activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="3">
<!--제스쳐로 입력할때는 View를 사용한다-->
<View
android:id="@+id/view1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#03A9F4" />
<View
android:id="@+id/view2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#FF9800" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<!--무슨 제스쳐를 했는지 설명하기 위한 TextView-->
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFFFF" />
</ScrollView>
</LinearLayout>
▼MainActivity.java
package com.example.my15_touchevent;
import androidx.appcompat.app.AppCompatActivity;
import android.gesture.GestureOverlayView;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
//객체 선언
View view1, view2;
ScrollView scrollView1;
TextView textView1;
GestureDetector detector; //무슨 제스쳐를 했는지 감지
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//객체 초기화
view1 = findViewById(R.id.view1);
view2 = findViewById(R.id.view2);
scrollView1 = findViewById(R.id.scrollView1);
textView1 = findViewById(R.id.textView1);
//터치를 했을때 작동하는 메서드
view1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
float curX = event.getX(); //눌린 곳의 X좌표
float curY = event.getY(); //눌린 곳의 Y좌표
if(action == event.ACTION_DOWN) { //처음 눌렸을 때
printString("손가락 눌림 : " + curX + ", " + curY);
} else if(action == event.ACTION_MOVE) { //누르고 움직였을 때
printString("손가락 움직임 : " + curX + ", " + curY);
} else if(action == event.ACTION_UP) { //누른걸 뗐을 때
printString("손가락 뗌 : " + curX + ", " + curY);
}
return true;
}
});
view2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
});
detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
//화면이 눌렸을 때
@Override
public boolean onDown(MotionEvent e) {
printString("onDown() 호출됨");
return true;
}
//화면이 눌렸다 떼어지는 경우
@Override
public void onShowPress(MotionEvent e) {
printString("onShowPress() 호출됨");
}
//화면이 한 손가락으로 눌렸다 떼어지는 경우
@Override
public boolean onSingleTapUp(MotionEvent e) {
printString("onSingleTapUp() 호출됨");
return true;
}
//화면이 눌린채 일정한 속도와 방향으로 움직였다 떼어지는 경우
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
printString("onScroll() 호출됨 => " + distanceX + ", " + distanceY);
return false;
}
//화면을 손가락으로 오랫동안 눌렀을 경우
@Override
public void onLongPress(MotionEvent e) {
printString("onLongPress() 호출됨");
}
//화면이 눌린채 손가락이 가속해서 움직였다 떼어지는 경우
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
printString("onFling() 호출됨 => " + velocityX + ", " + velocityY);
return true;
}
});
}
private void printString(String s) {
//좌표 출력
textView1.append(s + "\n"); //한 줄씩 추가
//자동으로 마지막 줄로 스크롤 내림
scrollView1.fullScroll(View.FOCUS_DOWN);
}
//키가 눌렸을때 작동
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
printString("시스템에서 [Back] 버튼이 눌림");
return true;
} else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
printString("시스템에서 [VOLUME UP] 버튼이 눌림");
return true;
} else if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
printString("시스템에서 [VOLUME DOWN] 버튼이 눌림");
return true;
} else if(keyCode == KeyEvent.KEYCODE_ENTER) {
printString("시스템에서 [Enter] 키가 눌림");
return true;
}
return false;
}
}
반응형
'취업성공패키지 SW 개발자 교육 > Android' 카테고리의 다른 글
[Android] 16. 프래그먼트(Fragment) : 버튼으로 프래그먼트 교체, 프래그먼트의 버튼으로 다른 프래그먼트의 이미지 교체 (0) | 2020.05.27 |
---|---|
[Android] 15. ProgressBar, ProgressDialog, SeekBar, 화면 방향 돌리기, 애니메이션 효과 (0) | 2020.05.26 |
[Android] 13. SMS 메시지 수신 후 내용 출력 (3) | 2020.05.22 |
[Android] 12. 서비스 (0) | 2020.05.21 |
[Android] 11. Life Cycle : onCreate, onStart, onResume, onPause, onStop, onDestroy, 데이터 저장, 불러오기 (0) | 2020.05.20 |