본문으로 바로가기

View에 Touch 이벤트로 움직이는 모션을 구현하고자 할 때

var moveX = 0f
var moveY = 0f  

move_view.setOnTouchListener { v, event ->
    when(event.action) {
        MotionEvent.ACTION_DOWN -> {
            moveX = v.x - event.rawX
            moveY = v.y - event.rawY
        }

        MotionEvent.ACTION_MOVE -> {
            v.animate()
                    .x(event.rawX + moveX)
                    .y(event.rawY + moveY)
                    .setDuration(0)
                    .start()
        }
    }

    true
}

움직이고자 하는 View에 setOnTouchListener에 위와 같은 리스너를 구현한다.

 

ACTION_DOWN 이벤트가 발생했을 경우 View의 위치를 저장하고

ACTION_MOVE 이벤트가 발생했을 경우 View의 위치를 저장한 변수를 이용하여 이동하는 애니메이션을 구현