터치 이벤트를 처리할때는 액티비티 클래스에 터치 이벤트의 콜백 함수인 onTouchEvent() 함수를 선언하면 된다.
class MainActivity : AppCompatActivity() {
override fun onTouchEvent(event: MotionEvent?): Boolean {
return super.onTouchEvent(event)
}
}
사용자가 화면을 터치하는 순간 onTouchEvent() 함수가 자동으로 호출된다. 매기변수인 MotionEvent 객체에는 터치의 종류와 발생 지점이 들어있다.
콜백 함수란? 어떤 이벤트가 발생하거나 시점에 도달했을 때 시스템에서 자동으로 호출하는 함수이다.
아래 코드처럼 이벤트를 처리할 수 있다.
override fun onTouchEvent(event: MotionEvent?): Boolean {
when(event?.action){
MotionEvent.ACTION_DOWN -> {
Log.d("kkang", "touch down event")
}
MotionEvent.ACTION_UP -> {
Log.d("kkang", "touch up event")
}
}
return super.onTouchEvent(event)
}
MotionEvent 객체로 이벤트가 발생한 지점의 좌푯값을 얻을 수 있다.
class MainActivity : AppCompatActivity() {
override fun onTouchEvent(event: MotionEvent?): Boolean {
when(event?.action){
MotionEvent.ACTION_DOWN -> {
Log.d("kkang", "touch down event x : ${event.x} rawX : ${event.rawX}")
}
MotionEvent.ACTION_UP -> {
Log.d("kkang", "touch up event y : ${event.y} rawY : ${event.rawY}")
}
}
return super.onTouchEvent(event)
}
}
키 이벤트가 발생하면 아래 함수가 자동으로 호출된다.
class MainActivity : AppCompatActivity() {
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
when(keyCode){
KeyEvent.KEYCODE_0 -> Log.d("kkang", "0 키를 눌렀습니다.")
KeyEvent.KEYCODE_A -> Log.d("kkang", "A 키를 눌렀습니다.")
}
return super.onKeyDown(keyCode, event)
}
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
Log.d("kkang", "onKeyUp")
return super.onKeyUp(keyCode, event)
}
}
폰의 키보드 입력 화면은 소프트 키보드라고 하며, 이는 터치 이벤트로 처리해야 한다. 볼륨 조절 버튼과 뒤로 가기 버튼은 키 이벤트로 처리할 수 있다.