[Android Study] 이벤트 - 터치 이벤트, 키 이벤트
* 터치 이벤트
- 앱의 화면에서 발생하는 사용자의 터치 이벤트를 처리하고 싶다면 액티비티 클래스에 터치 이벤트의 콜백 함수인 onTouchEvent()를 선언하면 된다. 콜백 함수란 어떤 이벤트가 발생하거나 시점에 도달했을 때 시스템에서 자동으로 호출하는 함수를 말한다.
class MainActivity: AppCompatActivity() {
override fun onTouchEvent(event: MotionEvent?): Boolean {
return super.onTouchEvent(event)
}
}
- 액티비티에 onTouchEvent 함수를 재정의(override)해서 선언만 해놓으면 사용자가 이 액티비티 화면을 터치하는 순간 onTouchEvent() 함수가 자동으로 호출된다. onTouchEvent 함수에 전달되는 매개변수는 MotionEvent 객체이며, 이 객체에 터치의 종류와 발생 지점(좌표값)이 담긴다.
* 터치 이벤트의 종류
- ACTION_DOWN: 화면을 손가락으로 누른 순간의 이벤트
- ACTION_UP: 화면에서 손가락을 떼는 순간의 이벤트
- ACTION_MOVE: 화면을 손가락으로 누른 채로 이동하는 순간의 이벤트
- 만약 화면을 손가락으로 살짝 눌렀다가 떼면 onTouchEvent() 함수는 2번 호출된다. action_down과 action_up 이벤트.
* 터치 이벤트 발생 좌표 얻기
- 이벤트가 발생한 지점을 알아야 할 때 onTouchEvent() 함수의 매개변수인 MotionEvent 객체를 사용하여 얻을 수 있다.
- x: 이벤트가 발생한 뷰의 x좌표
- y: 이벤트가 발생한 뷰의 y좌표
- rawX: 화면의 x좌표
- rawY: 화면의 y좌표
* 키 이벤트
- 키 이벤트는 사용자가 폰의 키를 누르는 순간에 발생한다. 액티비티에서 키 이벤트를 처리하려면 다음과 같이 콜백 함수를 재정의해야 한다. 그러면 키 이벤트가 발생할 때 해당 함수가 자동으로 호출된다.
- onKeyDown: 키를 누른 순간의 이벤트
- onKeyUp: 키를 떼는 순간의 이벤트
- onKeyLongPress: 키를 오래 누르는 순간의 이벤트
class MainActivity: AppCompatActivity() {
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
Log.d("KeyDown")
return super.onKeyDown(keyCode, event)
}
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
Log.d("KeyUp")
return super.onKeyUp(keyCode, event)
}
}
- 키 이벤트 함수의 첫 번째 매개변수는 키의 코드이며(keyCode) 이 값으로 사용자가 어떤 키를 눌렀는지 식별 가능하다.
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
when (keyCode) {
keyEvent.KEYCODE_0 -> Log.d("0 키를 눌렀습니다.")
keyEvent.KEYCODE_J -> Log.d("J 키를 눌렀습니다.")
}
return super.onKeyDown(keyCode, event)
}
- 이러한 키 이벤트가 발생하는 키는 폰에서 제공하는 소프트 키보드의 키를 의미하지는 않는다. 소프트 키보드란 앱에서 글을 입력할 때 화면 아래에서 올라오는 키보드를 말한다. 그래서 보통 키 이벤트는 전원 버튼, 볼륨 조절버튼, 뒤로가기 버튼 등에 사용된다.
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
when (keyCode) {
keyEvent.KEYCODE_VOLUME_UP -> Log.d("볼륨 업 키를 눌렀습니다.")
keyEvent.KEYCODE_BACK -> Log.d("뒤로가기 키를 눌렀습니다.")
}
return super.onKeyDown(keyCode, event)
}
- 특별히 뒤로가기 버튼 이벤트는 따로 함수가 있다.
onBackPressedDispatcher.addCallback(this, object: OnBackPressedCallback(true) {
override fun handleOnBackPRessed() {
Log.d("뒤로 가기 키를 눌렀습니다.")
}
}
'Study > Android' 카테고리의 다른 글
[Android Study] 리소스 (1) | 2024.03.15 |
---|---|
[Android Study] 뷰 이벤트 (1) | 2024.03.14 |
[Android Study] 레이아웃 - ConstraintLayout (1) | 2024.03.12 |
[Android Study] 레이아웃 - GridLayout (0) | 2024.03.11 |
[Android Study] 레이아웃 - RelativeLayout (0) | 2024.03.11 |