1. 대표적인 이벤트
이벤트 | 설명 |
터치 이벤트 |
- 화면을 손가락으로 누를 때 발생하는 이벤트 |
키 이벤트 |
- 키패드나 하드웨어 버튼을 누를 때 발생하는 이벤트 |
제스처 이벤트 |
- 터치 이벤트 중에서 일정 패턴을 만들어 내는 이벤트 |
포커스 |
- 뷰마다 순서대로 주어지는 포커스 |
화면 방향 변경 |
- 화면의 방향이 가로/세로로 바뀜에 따라 발생하는 이벤트 |
2. 이벤트와 리스너
버튼을 클릭하면 이벤트라는 것이 만들어집니다.
이벤트는 화면의 어느 부분에 어떻게 클릭하거나 터치했는지에 대한 정보를 담고 있게 됩니다.
이 이벤트는 필요에 따라 사용할 수 있도록 리스너로 전달됩니다.
따라서 버튼에 리스너를 등록해두면 버튼이 클릭 될 때마다 리스너의 메소드가 자동으로 호출되게 됩니다.
이벤트 종류는 터치 이벤트, 클릭 이벤트, 키 이벤트 등 다양합니다.
3. 터치 이벤트
- boolean onTouchEvent (MotionEvent event) 또는 View.OnTouchListener : boolean onTouch (View v, MotionEvent event) 사용
- onClickListener보다 세밀한 트래킹 가능
- GestureDetector는 onTouchListener보다 세밀한 트래킹 가능
package org.techtown.event;
import androidx.appcompat.app.AppCompatActivity;
import android.gesture.GestureOverlayView;
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 = (TextView) findViewById(R.id.textView);
View view = findViewById(R.id.view);
view.setOnTouchListener(new View.OnTouchListener() { // 터치 리스너
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
float curX = event.getX();
float curY = event.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 e) {
println("onDown() 호출됨");
return true;
}
@Override
public void onShowPress(MotionEvent e) {
println("onShowPress() 호출됨");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
println("onSingleTapUp() 호출됨");
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
println("onScroll() 호출됨" + distanceX + "," + distanceY);
return true;
}
@Override
public void onLongPress(MotionEvent e) {
println("onLongPress() 호출됨");
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
println("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 println(String data) {
textView.append(data + "\n");
}
}
4. 키 이벤트
- 키패드의 키가 눌렸을 때는 키 이벤트가 발생
- 새로 생성할 경우는 아래와 같이,
boolean onKeyDown (int keyCode, KeyEvent event)
boolean onKeyUp (int keyCode, KeyEvent event)
기존의 뷰에 메소드 추가할 경우에는 아래와 같이.
View.OnKeyListener : boolean onKey (View v, int keyCode, KeyEvent event)
- 사용자가 누를 수 있는 키로는 a, b, c와 같은 알파벳이나 1, 2, 3과 같은 숫자가 있을 수 있지만 그 외에도 시스템 BACK 키나 시스템 HOME 키도 있을 수 있습니다.
화면 하단에 항상 보이는 키인데 이 키를 눌렀을 때도 이벤트를 받을 수 있는 거죠.
그 중에서도 시스템 BACK 키는 자주 사용됩니다.
이전 화면을 돌아가고 싶을 때나 현재 진행 중인 작업을 취소하고 싶은 경우가 자주 생기기 때문입니다.
이 경우에는 간단하게 onBackPressed 메소드를 재정의하면 됩니다. : void onBackPressed()
아니면 키 이벤트를 직접 처리할 수도 있습니다.
키 이벤트를 처리하고 싶다면 onKeyDown 메소드를 재정의하고 파라미터로 전달된 KeyEvent 객체를 참조합니다.
그러면 어떤 키가 눌렸는지 알 수 있습니다.
@Override // generate > override methods > onKeyDown 으로 생성
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Toast.makeText(this, "시스템 BACK 버튼 눌림", Toast.LENGTH_LONG).show();
return true; // back 키 누르면 종료가 아니라 다른 event가 실행되도록 할 수 있음
}
return false;
}
- 키를 눌렀을 때 전달되는 대표적인 키값
키 코드 | 설명 |
KEYCODE_DPAD_LEFT | - 왼쪽 화살표 |
KEYCODE_DPAD_RIGHT | - 오른쪽 화살표 |
KEYCODE_DPAD_UP | - 위쪽 화살표 |
KEYCODE_DPAD_DOWN | - 아래쪽 화살표 |
KEYCODE_DPAD_CENTER | - [중앙] 버튼 |
KEYCODE_CALL | - [통화] 버튼 |
KEYCODE_ENDCALL | - [통화 종료] 버튼 |
KEYCODE_HOME | - [홈] 버튼 |
KEYCODE_BACK | - [뒤로 가기] 버튼 |
KEYCODE_VOLUME_UP | - [소리 크기 증가] 버튼 |
KEYCODE_VOLUME_DOWN | - [소리 크기 감소] 버튼 |
KEYCODE_0 ~ KEYCODE_9 | - 숫자 0부터 9까지의 키값 |
KEYCODE_A ~ KEYCODE_Z | - 알파벳 A부터 Z까지의 키값 |
'Android' 카테고리의 다른 글
[Android] 안드로이드 : 알림 대화상자 만들기 (0) | 2019.12.01 |
---|---|
[Android] 안드로이드 : 토스트 보여주기 (0) | 2019.12.01 |
[Android] 안드로이드 : 스크롤뷰 만들기 (0) | 2019.11.30 |
[Android] 안드로이드 : 테이블 레이아웃 만들기 (0) | 2019.11.30 |
[Android] 안드로이드 : 쉐이프 드로어블 만들기 (0) | 2019.11.28 |
댓글