안드로이드 스튜디오 사용자 이벤트 처리하기 (터치, 키)

2022. 12. 6. 17:07_Study/AndroidStudio

728x90

터치와 키 이벤트  🐇¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•

해당 자료는 강의 학습자료이며, Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린을 참고하였습니다.


터치 이벤트

앱의 화면에서 발생하는 사용자 이벤트를 터치 이벤트라고 하며 액티비티에 콜백 함수인 onTouchEvent()를 재정의하여 처리한다. 매개변수는 MotionEvent 객체이며, 이 객체이 터치의 종류와 발생지점(좌푯값)이 담긴다.

override fun onTouchEvent(event: MotionEvent?): Boolean {
    return super.onTouchEvent(event)
} // onCreate 밑에 만들기 MainActivity 안이다.

 

터치 이벤트의 종류

- ACTION_DOWN : 화면을 손가락으로 누른 순간의 이벤트

- ACTION_UP : 화면을 손가락으로 떼는 순간의 이벤트

- ACTION_MOVE : 화면을 손가락으로 누른 채로 이동하는 순간의 이벤트

package com.example.ch3

import android.os.Bundle
import android.util.Log
import android.view.MotionEvent
import android.view.View
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.example.ch3.databinding.ActivityMainBinding
import org.w3c.dom.Text

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root) // 뷰 객체 생성
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        when(event?.action){
            MotionEvent.ACTION_DOWN ->{
                Log.d("kkang","Touch down")
            }
            MotionEvent.ACTION_UP -> {
                Log.d("kkang","Touch up event")
            }
        }
        return super.onTouchEvent(event)
    }
}

 

 

터치 이벤트 발생 좌표를 얻으려면 onTouchEvent() 함수인 매개변수 MotionEvent 객체로 획득한다.

- x : 이벤트가 발생한 뷰의 x 좌표

- y : 이벤트라 발생한 뷰의 y 좌표

- rawX : 화면의 X 좌표

- rawY : 화면의 Y 좌표

 

뷰를 나누었는데도 좌표가 화면좌표로 나왔다.

 

절대좌표와 상대좌표인지 더 찾아보기로 했다. view 상으로 Y 경로도 다르게 나와야하는데 같이 나와서 수정중이다.

 

 

 

 

 

키 이벤트 (키보드 사용 시 필요)

사용자가 폰의 키를 누르는 순간 발생한다.

콜백 함수

- onKeyDown : 키를 누른 순간의 이벤트에 호출된다.

- onKeyUp : 키를 떼는 순간의 이벤트에 호출된다. (드래그할때 좌표가 달라짐)

- onKeyLongPress: 키를 오래 누르는 이벤트에 호출된다.

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    return super.onKeyDown(keyCode, event)
}

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
    return super.onKeyUp(keyCode, event)
}

override fun onKeyLongPress(keyCode: Int, event: KeyEvent?): Boolean {
    return super.onKeyLongPress(keyCode, event)
}

 

 

 

첫 번째 매개변수(keyCode)는 키의 코드이며 이 값으로 사용자가 어떤 키를 눌렀는지 식별한다.

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)
}

 

 

 

소프트 키보드안드로이드 시스템에 등록된 앱으로서 키를 누르면 글은 입력되지만 키 이벤트는 발생하지 않는다.

하드웨어 키보드의 키를 입력하면 키 이벤트로 처리할 수 있다.

안드로이드 시스템 버튼은 5종류이다.

- 뒤로가기, 볼륨조절 버튼은 키 이벤트로 처리가능한 하드웨어 키보드

- 전원, 홈, 오버뷰 버튼은 키이벤트로 처리할 수 없다. (하드웨어이긴 함)

 

 

 

뒤로 가기 버튼 이벤트에는 onKeyDown(), onKeyUp() 함수 뿐만 아니라 onBackPressed() 함수도 이용 가능하다.

키를 누르는 순간 호출된다.