본문 바로가기
Android/안드로이드 스터디(Kotlin)

Android Studio, Kotlin] 화면 터치 시 클릭이벤트와 손가락 무빙 이벤트를 다르게 처리하기

by 김마리님 2023. 3. 17.

가끔 모션 개발을 하다 보면, Action_Move가 들어가야 할 케이스가 있다.

여기서, 손가락을 단순 클릭 했을 때와 움직임과 무빙 후 움직임이 달라야하는 케이스가 있다.

이 때, 얼마나 짧게 클릭하던 무조건 Action_move가 호출된다 봐도 무방하기 때문에, 초기 클릭과 손가락을 뗐을 때의 시간차를 계산하여 이를 단순 클릭인지, 혹은 이동 후 손가락을 뗀 것인지 판단한다.

사용자의 특성과 코드의 특징에 따라 longClickLimitf를 조절하여 클릭으로 판단하는 시간의 길이를 유동적으로 조절해야 한다.

 

호출 시기는 아래에 주석으로 적어두었다.

var firstClickTime : Long = 0
val longClickLimit = 200

rootView?.setOnTouchListener { v, event ->
            when(event.action) {
                MotionEvent.ACTION_DOWN -> {
                    firstClickTime = System.currentTimeMillis()
                    textViewLog.append("ILog ==> $TAG | action down \n")
                    return@setOnTouchListener true
                }

                MotionEvent.ACTION_MOVE -> {
                    //you add action when finger move
                    textViewLog.append("ILog ==> $TAG | action move \n")
                    return@setOnTouchListener true
                }

                MotionEvent.ACTION_UP -> {
                    if(System.currentTimeMillis() - firstClickTime < longClickLimit) {
                        //you add action when finger click
                        textViewLog.append("ILog ==> $TAG | action up single tap \n")
                    } else {
                        //you add action when finger move end
                        textViewLog.append("ILog ==> $TAG | action up move end \n")
                    }

                    return@setOnTouchListener true
                }

                else -> return@setOnTouchListener true
            }
        }

 

그럼 실제 움직임과 그에 따른 매서드 호출을 확인하자.

반응형