터치와 키 이벤트

Hyeon·2023년 4월 18일
0

Android

목록 보기
8/15

터치 이벤트

터치 이벤트를 처리할때는 액티비티 클래스에 터치 이벤트의 콜백 함수인 onTouchEvent() 함수를 선언하면 된다.

class MainActivity : AppCompatActivity() {
    override fun onTouchEvent(event: MotionEvent?): Boolean {
        return super.onTouchEvent(event)
    }
}

사용자가 화면을 터치하는 순간 onTouchEvent() 함수가 자동으로 호출된다. 매기변수인 MotionEvent 객체에는 터치의 종류와 발생 지점이 들어있다.

콜백 함수란? 어떤 이벤트가 발생하거나 시점에 도달했을 때 시스템에서 자동으로 호출하는 함수이다.

터치 이벤트의 종류 및 처리 방법

  1. ACTION_DOWN : 화면을 손가락으로 누른 순간의 이벤트
  2. ACTION_UP : 화면에 손가락을 뗀 순간의 이벤트
  3. ACTION_MOVE : 화면에 손가락으로 누른 채로 이동할 때 이벤트

아래 코드처럼 이벤트를 처리할 수 있다.

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 객체로 이벤트가 발생한 지점의 좌푯값을 얻을 수 있다.

  • x : 이벤트가 발생한 뷰의 X 좌표
  • y : 이벤트가 발생한 뷰의 Y 좌표
  • rawX : 화면의 X 좌표
  • rawY : 화면의 Y 좌표
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)
    }
}

키 이벤트

키 이벤트가 발생하면 아래 함수가 자동으로 호출된다.

함수

  • onKeyDown : 키를 누른 순간의 이벤트
  • onKeyUp : 키를 떼는 순간의 이벤트
  • onKeyLongPress : 키를 오래 누르는 순간의 이벤트

매개변수

  1. keyCode : 사용자가 누른 키의 코드로, 이 값으로 어떤 키를 눌렀는지 식별한다.
  2. KeyEvent
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)
    }
}

폰의 키보드 입력 화면은 소프트 키보드라고 하며, 이는 터치 이벤트로 처리해야 한다. 볼륨 조절 버튼과 뒤로 가기 버튼은 키 이벤트로 처리할 수 있다.

참고자료

  • Do it 안드로이드 도서
profile
컴공학부생입니다.

0개의 댓글