Nuke Olaf - Log Store

[Android] 안드로이드 - 버튼을 눌렀을 때의 이벤트에 대한 고찰 (입력 이벤트) 본문

Android

[Android] 안드로이드 - 버튼을 눌렀을 때의 이벤트에 대한 고찰 (입력 이벤트)

NukeOlaf 2020. 1. 19. 02:48

안드로이드에서 버튼을 눌렀을때, Listener 라는 call-back 을 달아서 사용자의 입력을 처리한다.

 

지금까지는 그냥 button 에 setOnClickListener 를 달아서 생각없이 사용하기만 했었던 것 같다. setOnClickListener 에 버튼을 눌렀을때 동작시키고 싶은 코드를 작성하는식으로만 사용했었다.

그러나, 프로젝트를 진행하면서 버튼을 누른 상황에서만 어떤 코드를 동작시키고 싶은 상황이 발생했다. 버튼을 누르고 있을때만 이미지를 보여주다가, 버튼에서 손을 떼면 이미지가 사라지는 기능을 구현하고 싶었다.

처음에는 안드로이드 버튼 클릭 이벤트로 검색을 했지만, 클릭 리스너에 대한 내용밖에 나오질 않았다. 좀 더 검색해보니 onkeydown 이라는 키워드가 나왔다. 그것을 중심으로 더 검색해보니, 내가 원하는 기능을 구현하기 위해서는 Android 에서의 입력 이벤트에 대해 공부해야한다는 사실을 알 수 있었다.

 

Android Input Events 에 관한 docs 링크 : https://developer.android.com/guide/topics/ui/ui-events

 

1. 사용자가 UI, 즉 View 를 클릭하고, 터치하고, 길게 누르는 등의 상호작용하는 것을 "입력 이벤트 (Input Event)" 라고 말한다. 안드로이드에서는 입력 이벤트에 따른 처리를 하기 위해서 이벤트 리스너를 제공한다.

예를 들어서, 내가 지금까지 사용했던 button 에 onClickListener 를 달았던 것도, 사용자가 버튼을 누르는 "입력 이벤트" 에 따른 처리를 하기 위한 "이벤트 리스너"를 사용했던 것이라고 생각하면 된다.

 

2. 그렇다면, 안드로이드에서 제공하는 이벤트 리스너에는 무엇이 있을까?

대표적으로는 아래와 같다

onClick () 이 메소드는 사용자가 탐색 키 또는 트랙볼을 사용하여 항목을 터치하거나 초점을 맞추거나 "입력"키를 누르거나 트랙볼을 아래로 누를 때 호출됩니다.
onLongClick () 이 메소드는 사용자가 항목을 터치하고 유지하거나 탐색 키 또는 트랙볼을 사용하여 항목에 초점을 맞추고 "입력"키를 누르고 있거나 트랙볼을 누르고 있습니다 (1 초).
onFocusChange () 이 메소드는 사용자가 탐색 키 또는 트랙볼을 사용하여 항목을 탐색하거나 항목에서 벗어날 때 호출됩니다.
onKey () 이 방법은 사용자가 항목에 집중하고 장치에서 하드웨어 키를 누르거나 놓을 때 호출됩니다.
onTouch () 이 메소드는 사용자가 화면에서 누르기, 놓기 또는 이동 동작을 포함하여 터치 이벤트를 수행 할 때 호출됩니다.
onCreateContextMenu () 이 메소드는 컨텍스트 메뉴가 작성 될 때 호출됩니다.

 

3. onTouchListener 사용한 예

edit_btn_origin.setOnTouchListener { v, event ->

            var btn: Button = v as Button
            when(event.action) {
                MotionEvent.ACTION_DOWN -> {
                    btn.background = getDrawable(R.drawable.custom_btn_pressed)
                    showOrigin()
                }
                MotionEvent.ACTION_UP -> {
                    btn.background = getDrawable(R.drawable.custom_btn)
                    showEdited()
                }
            }
            true
        }

 

 

참고 사이트 >>>

https://whatisthenext.tistory.com/31

https://www.tutlane.com/tutorial/android/android-input-events-event-listeners-event-handling

https://bitsoul.tistory.com/13

 

Comments