[안드로이드/코틀린] 이벤트 모델

박의진·2022년 9월 7일
0

이벤트 모델

1. Hierarchy Event Model

원론적 이벤트 모델

1) key Event

폰의 키를 누르는 순간의 이벤트
•onKeyDown : 키가 눌린 순간의 이벤트
•onKeyUp : 키를 떼는 순간의 이벤트
•onKeyLongPress : 키를 오래 누르는 순간의 이벤트

 //back button 이벤트를 위해
    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        //back button 이 눌린거라면..
        if (keyCode === KeyEvent.KEYCODE_BACK) {
            //처음 back button 을 누르거나 누른지 3초가 지난거라면
            if (System.currentTimeMillis() - initTime > 3000) {
                Toast.makeText(this, "종료하려면 한번더 누르세요!!", Toast.LENGTH_SHORT).show()
                initTime = System.currentTimeMillis()
                return true
            }
        }
        return super.onKeyDown(keyCode, event)
    }

2) Touch Event

•유저가 화면을 터치해서 발생시키는 이벤트
•onTouchEvent() 이벤트 콜백함수 이용
•ACTION_DOWN : 화면을 터치한 순간의 이벤트
•ACTION_UP : 화면에서 터치를 떼는 순간의 이벤트
•ACTION_MOVE : 화면을 터치해 이동하는 순간의 이벤트
•x : 이벤트가 발생한 View 내에서의 좌표
•y : 이벤트가 발생한 View 내에서의 좌표
•rawX : 화면에서의 좌표
•rawY : 화면에서의 좌표

class MainActivity : AppCompatActivity() {

    lateinit var resultView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        resultView = findViewById(R.id.resultView)
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        var eventType = ""
        when (event?.action){
            MotionEvent.ACTION_DOWN -> eventType = "DOWN EVENT"
            MotionEvent.ACTION_UP -> eventType = "UP EVENT"
            MotionEvent.ACTION_MOVE -> eventType = "MOVE EVENT"
        }
        resultView.text = "$eventType : x - ${event?.x}, y - ${event?.y}"
        return super.onTouchEvent(event)
    }
}

2. Delegation Event Model

OOP적 이벤트 : 이벤트가 발생한 객체의 명료성

1) Click Event

뷰를 유저가 터치하는 순간의 이벤트

  • View 클래스에 선언된 이벤트
  • ClickEvent 와 LongClickEvent 제공
  • 이벤트 소스(이벤트 발생 객체)와 이벤트 핸들러(이벤트 처리 객체)가 구분됨
profile
주니어 개발자의 개발일지

0개의 댓글