IT/Android

[Android] View에서 onTouchEvent 이벤트 ACTION_DOWN 만 나오는 문제

토마토조아 2020. 5. 4. 23:53
728x90

안드로이드 개발을 하다 보면 터치 이벤트를 상당히 잘 설계하고 사용해야 한다.

보통 View에서 내가 원하는 위젯을 상속받고 터치 이벤트만 커스텀하여 사용하는 경우도 종종 발생하는데,

그 중에서도 MotionEvent를 다루는 경우가 종종 발생한다.

그런데 막상 MotionEvent로 ACTION_UP / ACTION_DOWN / ACTION_MOVE 를 조절해서 사용해야 하는데,

아무리 이것 저것 건드려봐도 ACTION_DOWN만 넘어오는 경우가 발생한다.

이럴 경우 가장 쉽게 해볼 수 있는 방법은 해당 위젯의 clickable 속성을 true 해주는 경우다.

 

나의 경우는 ViewPager를 커스텀하여 개발을 진행하는데, 아무리 해도 onTouchEvent에서 ACTION_DOWN만 넘어오길래 한참을 구글링하다가 찾아낸 방법이었다.

구글링 중간에 MotionEventCompat의 ACTION_MASK를 이용해서 ACTION을 받으라는 방법도 있었으나, 나에게는 필요없는 문제였다.

    <ImageView
        android:id="@+id/portrait_iv"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_dashboard_black_24dp"
        android:clickable="true" />
    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
            var startY = 0f
            var currentY = 0f

            when(ev.action) {
                MotionEvent.ACTION_DOWN -> {
                    startY = ev.y
                }
                MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_UP -> {
                
                }
                MotionEvent.ACTION_MOVE -> {
                    currentY = ev.y
                    Log.d("ldhcjs", "ACTION_MOVE HORIZONTAL $currentY")
                    Log.d("ldhcjs", "ACTION_MOVE HORIZONTAL ${startY - currentY}")
                    if(abs(startY - currentY) > 0f) {
                        return true
                    }
                }

            }
        }
        return super.onInterceptTouchEvent(ev)
    }
728x90