JLOG
[안드로이드 스튜디오 강좌 #15] 이벤트 처리 이해하기 - 제스처 이벤트 처리하기 / 키이벤트처리하기 본문
[안드로이드 스튜디오 강좌 #15] 이벤트 처리 이해하기 - 제스처 이벤트 처리하기 / 키이벤트처리하기
정정선선 2020. 5. 16. 07:18이전 강의에 이어서 진행합니다.
[안드로이드 스튜디오 강좌 #15] 이벤트 처리 이해하기 - 이벤트 처리 방식 / 터치 이벤트
! 목표
눌림, 움직임, 뗌, 드래그 등을 처리하는 제스처 이벤트와 키를 눌렀을 때 발생하는 키 이벤트에 대해서 알아보자.
1. 제스처 이벤트 처리하기
제스처 이벤트는 터치 이벤트 중 스크롤 등을 구별한 후 알려주는 이벤트이다.
GestureDetector로 제스쳐 이벤트를 처리해줄 수 있고, 이 객체에 터치 이벤트를 전달하면 각 사황에 맞는 메서드를 호출한다.
아래의 추가된 코드를 입력해보자
MainActivity.java
package org.techtowm.sampleevent;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
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(){
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() {
public boolean onDown(MotionEvent motionEvent) {
println("onDown() 호출됨");
return true;
}
public void onShowPress(MotionEvent motionEvent) {
println("onSHowPress() 호출됨");
}
public boolean onSingleTapUp(MotionEvent motionEvent) {
println("onSingleTapUp() 호출됨");
return true;
}
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1){
println("onScroll() 호출됨 : "+v+", "+v1);
return true;
}
public void onLongPress(MotionEvent motionEvent) {
println("onLongPress() 호출됨");
}
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 v, MotionEvent motionEvent) {
detector.onTouchEvent(motionEvent);
return true;
}
});
//추가 코드 여기까지
}
public void println(String data){
textView.append(data+"\n");
}
})
}
두번째 뷰에서 onTouchListener 객체를 설정하고 있다.
두 번째 뷰 객체를 터치했을 때 자동으로 onTouch() 메서드가 호출되고 해당 GestrueDetector 객체의 onTouchEvent() 메서드를 호출하면서 MotionEvent 객체를 전달한다.
-onDown() : 화면을 눌렀을 경우
-onShowPress() :화면이 눌렸다 떼어지는 경우
-onSingleTapUp() : 화면이 한손가락으로 눌렀다 떼어지는 경우
-onScroll() : 화면이 눌린채 일정한 속도와 방향으로 움직였다 떼는 경우
-onFling() : 화면이 눌릴 채 가속도를 붙여 손가락을 움직였다 떼느 경우
-onLongPress() : 화면을 손가락으로 오래 누르는 경우
실행해보면,
각 모션 이벤트를 받아 해당 이벤트에 대한 호출 결과를 맨 밑의 뷰에 나타내지는 것을 확인할 수 있다.
2. 키 이벤트 처리하기
*키를 눌렀을 때 전달되는 대표적인 키 값
-KEYCODE_DPAD_LEFT : 왼쪽 화살표
-KEYCODE_DPAD_RIGHT : 오른쪽 화살표
-KEYCODE_DPAD_UP : 위쪽 화살표
-KEYCODE_DPAD_DOWN : 아래쪽 화살표
-KEYCODE_DPAD_CENTER : [중앙] 버튼
-KEYCODE_CALL : [통화] 버튼
-KEYCODE_ENDCALL : [통화 종료] 버튼
-KEYCODE_BACK : [뒤로 가기] 버튼
-KEYCODE_VOLUME_UP : [소리 크기 증가] 버튼
-KEYCODE_VOLUME_DOWN : [소리 크기 감소] 버튼
-KEYCODE_0 ~ KEYCODE_9 : 숫자 0부터 9까지의 키 값
-KEYCODE_A ~ KEYCODE_Z : 알파벳 A부터 Z까지의 키 값
관련 클래스
boolean onKeyDown (int KeyCode, KeyEvent event)
boolean onKey (View v, int KeyCode, KeyEvent event)
-onKeyDown()
키 입력은 onKeyDown() 메서드를 정의하여 처리한다.
onKeyDown으로 전달되는 파라미터는 두개이며,
KeyCode는 어떤 키가 사용되는지 구별할 때 사용한다
KeyEvent는 키 입력 이벤트에 대한 정보를 알고 싶을 때 사용한다.
-onKey()
onKey() 메서드는 OnKeyListener 인터페이스를 구현할 때 사용한다.
다음의 표는 key-Code 정수 값으로 구분할 수 있는 대표적인 키 값들이다.
*참고
시스템 [Back] 키가 눌렸을 때는 void onBackPressed() 메서드로 간단하게 처리가능하다.
-MainActivity.java
MainActivity.java 파일에서 MainActivity 클래스를 클릭 후
마우스 우클릭-Generate-Override Methods 메뉴를 선택하고
onKeyDown() 메서드를 선택후 OK 를 누르자
만들어진 onKeyDown 메서드 안에 안에 코드 내용을 입력하자.
@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;
}
뒤로가기 버튼이 누르면 "시스템 [Back] 버튼이 눌렸습니다."라는 내용의 토스트 메세지가 출력될 것이다.
실행 시켜보면 메세지가 출력되는 것을 볼 수있다.
## 이 글은 Do it 안드로이드 앱 프로그래밍을 참고해서 작성되었습니다.
도서에는 더 자세하고 알기 쉽게 설명이 되어 있어 도서를 참고하면서 공부하는 것을 추천드립니다.
'안드로이드 스튜디오 > Do it 안드로이드 스튜디오' 카테고리의 다른 글
[안드로이드 스튜디오 강좌 #16] 토스트, 스낵바, 대화상자 - 토스트(Toast) (0) | 2020.05.20 |
---|---|
[안드로이드 스튜디오 강좌 #15] 이벤트 처리 이해하기 - 단말 방향 전환 이벤트 처리 (0) | 2020.05.19 |
[안드로이드 스튜디오 강좌 #15] 이벤트 처리 이해하기 - 이벤트 처리 방식 / 터치 이벤트 (0) | 2020.05.15 |
[안드로이드 스튜디오 강좌 #14] 드로어블(Drawable) 만들기 (0) | 2020.05.10 |
[안드로이드 스튜디오 강좌 #13] 기본 위젯 공부하기 : ImageView, ImageButton (0) | 2020.05.10 |