[Android] Key/Touch/Click Event ์ •๋ฆฌ

Minjun Kimยท2023๋…„ 8์›” 20์ผ
0

Android

๋ชฉ๋ก ๋ณด๊ธฐ
16/47
post-thumbnail

๐Ÿ“ SeSAC์˜ 'JetPack๊ณผ Kotlin์„ ํ™œ์šฉํ•œ Android App ๊ฐœ๋ฐœ' ๊ฐ•์ขŒ๋ฅผ ์ •๋ฆฌํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.


๐Ÿ“š Key Event

ํฐ์˜ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„์˜ ์ด๋ฒคํŠธ

  • onKeyDown : ํ‚ค๊ฐ€ ๋ˆŒ๋ฆฐ ์ˆœ๊ฐ„์˜ ์ด๋ฒคํŠธ

  • onKeyUp : ํ‚ค๋ฅผ ๋–ผ๋Š” ์ˆœ๊ฐ„์˜ ์ด๋ฒคํŠธ

  • onKeyLongPress : ํ‚ค๋ฅผ ์˜ค๋ž˜ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„์˜ ์ด๋ฒคํŠธ

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
	when (keyCode) {
		KeyEvent.KEYCODE_0 -> Log.d("kotdev99", "0๋ฒˆ ํ‚ค๊ฐ€ ๋ˆŒ๋ ธ๋„ค์š”.")
		KeyEvent.KEYCODE_A -> Log.d("kotdev99", "Aํ‚ค๊ฐ€ ๋ˆŒ๋ ธ๋„ค์š”.")
	}
	return super.onKeyDown(keyCode, event)
}
  • ํ‚ค๊ฐ€ ๋ˆŒ๋ฆฌ๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ KeyCode ๊ฐ’์ด ์ „๋‹ฌ๋˜๊ณ , ์ด๊ฒƒ์œผ๋กœ ์œ ์ €๊ฐ€ ๋ˆ„๋ฅธ ํ‚ค๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

โ“ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

์•ฑ์˜ ์ดˆ๊ธฐํ™”๋ฉด์—์„œ back ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ '์•ฑ์ด ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค' ๋ผ๋Š” ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ ์ถœ๋ ฅ ๋“ฑ


๐Ÿ“š Touch Event

์œ ์ €๊ฐ€ ํ™”๋ฉด์„ ํ„ฐ์น˜ํ•ด์„œ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ด๋ฒคํŠธ

  • onTouchEvent() ์ด๋ฒคํŠธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์ด์šฉ
override fun onTouchEvent(event: MotionEvent?): Boolean {
	return super.onTouchEvent(event)
}
  • ํ„ฐ์น˜ ์‹œ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ขŒํ‘œ๊ฐ’ ํ˜น์€ ํ„ฐ์น˜ ์ด๋ฒคํŠธ์˜ ์ข…๋ฅ˜๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค.

override fun onTouchEvent(event: MotionEvent?): Boolean {
	when (event?.action) {
		MotionEvent.ACTION_DOWN -> {
				
		}
		MotionEvent.ACTION_UP -> {
				
		}
	}
	return super.onTouchEvent(event)
}
  • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ MotionEvent ๋ผ๋Š” ๊ฐ์ฒด๋‹ค.

  • ์ด ๋งค๊ฐœ๋ณ€์ˆ˜.action ์ด๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ ์ข…๋ฅ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ์ด๋ฒคํŠธ ์ข…๋ฅ˜

ACTION_DOWN : ํ™”๋ฉด์„ ํ„ฐ์น˜ํ•œ ์ˆœ๊ฐ„์˜ ์ด๋ฒคํŠธ

ACTION_UP : ํ™”๋ฉด์—์„œ ํ„ฐ์น˜๋ฅผ ๋–ผ๋Š” ์ˆœ๊ฐ„์˜ ์ด๋ฒคํŠธ

ACTION_MOVE : ํ™”๋ฉด์„ ํ„ฐ์น˜ํ•ด ์ด๋™ํ•˜๋Š” ์ˆœ๊ฐ„์˜ ์ด๋ฒคํŠธ
  • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ˆœ๊ฐ„ ์ˆœ๊ฐ„ ์ขŒํ‘œ๊ฐ’์ด ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ๋‹ค.

๐Ÿ“Œ ์ด๋ฒคํŠธ ์ขŒํ‘œ

x : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ View ๋‚ด์—์„œ์˜ ์ขŒํ‘œ

y : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ View ๋‚ด์—์„œ์˜ ์ขŒํ‘œ

rawX : ํ™”๋ฉด์—์„œ์˜ ์ขŒํ‘œ

rawY : ํ™”๋ฉด์—์„œ์˜ ์ขŒํ‘œ
override fun onTouchEvent(event: MotionEvent?): Boolean {
	when (event?.action) {
		MotionEvent.ACTION_DOWN -> {
			Log.d("kotdev99", "Touch down event.... x: ${event.x}, rawX: ${event.rawX}")
		}
	}
	return super.onTouchEvent(event)
}
  • rawX, rawY๋Š” ์ „์ฒด ํ™”๋ฉด์—์„œ์˜ ์ขŒํ‘œ๊ฐ’์„, x, y๋Š” ํ„ฐ์น˜๊ฐ€ ๋ฐœ์ƒํ•œ View ๋‚ด๋ถ€์—์„œ์˜ ์ขŒํ‘œ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค.

๐Ÿ“š Click Event

๋ทฐ๋ฅผ ์œ ์ €๊ฐ€ ํ„ฐ์น˜ํ•˜๋Š” ์ˆœ๊ฐ„์˜ ์ด๋ฒคํŠธ

  • ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ธ View์— ์„ ์–ธ๋œ ์ด๋ฒคํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋ทฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ๋ฌผ๋ก  ์ฒดํฌ๋ฐ•์Šค์—์„œ๋Š” StateChange Event, ๋ฆฌ์ŠคํŠธ๋ทฐ์—์„œ๋Š” ItemClick Event ๋ผ๊ณ  ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋ณธ์งˆ์€ Click Event ์ด๋‹ค.

  • ์ผ๋ฐ˜์ ์œผ๋กœ ClickEvent๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ,
    ๋ทฐ๊ฐ€ ์˜ค๋ž˜ ๋ˆŒ๋ฆฌ๋Š” ์ˆœ๊ฐ„์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด LongClickEvent ์‚ฌ์šฉ

๐Ÿ“Œ Click Event ์˜ ๊ตฌ์กฐ

ํ•ญ์ƒ Event Source ์™€ Event Handler ๋ผ๋Š” ๊ฐ์ฒด๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฒ˜๋ฆฌ๋œ๋‹ค.

Event Source : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฐ์ฒด

Event Handler : ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋‚ด์šฉ
  • ์ฆ‰, Event Source๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ Event Handler์˜ ๊ฐ์ฒด ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

โ“ ๊ทธ๋Ÿผ ์ด ๋‘˜์„ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ• ๊นŒ?

๋ฆฌ์Šค๋„ˆ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.

  • open fun setOnClickListener(I: View.OnClickListener?): Unit

  • open fun setOnLongClickListener(I: View.OnLongClickListener?): Unit

button.setOnClickListener(object: View OnClickListener {
	override fun onClick(p0: View?) {
    	//...........
    }
})    
  • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค.

  • Kotlin์—์„œ๋Š” ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ SAM ๊ธฐ๋ฒ•

  • Single Abstract Method
button.setOnClickListener {
	//..........
}
  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•  ๋•Œ ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ถ”์ƒํ•จ์ˆ˜๊ฐ€ ๋”ฑ 1๊ฐœ๋ผ๋ฉด,
    ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ๋กœ์ง๋งŒ ๋ฐ”๋กœ ์ฝ”๋“œ ๋ธ”๋ก์— ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์›๋ž˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค View OnClickListener๋ฅผ ๊ฐ์ฒด๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด
    onClick()์„ ์žฌ์ •์˜ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

profile
์‘์•  ๋‚˜ ์•„๊ธฐ ๋‰ด๋น„

0๊ฐœ์˜ ๋Œ“๊ธ€