[Android Study] 이벤트 - 터치 이벤트, 키 이벤트

728x90
반응형

* 터치 이벤트

 - 앱의 화면에서 발생하는 사용자의 터치 이벤트를 처리하고 싶다면 액티비티 클래스에 터치 이벤트의 콜백 함수인 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좌표

x와 rawX의 차이

 

* 키 이벤트

- 키 이벤트는 사용자가 폰의 키를 누르는 순간에 발생한다. 액티비티에서 키 이벤트를 처리하려면 다음과 같이 콜백 함수를 재정의해야 한다. 그러면 키 이벤트가 발생할 때 해당 함수가 자동으로 호출된다.

  • 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("뒤로 가기 키를 눌렀습니다.")
    }
}

 

 

728x90
반응형
TAGS.

Comments