Я пытаюсь заставить вид переместиться в любом направлении и заставить его замедляться, пока не остановится. Размах должен быть выполнен в любом направлении, а не только по оси ВВЕРХ, ВНИЗ, ВЛЕВО и ВПРАВО. Кроме того, скорость должна определять, как сильно скользит изображение после того, как пользователь убрал палец с дисплея.
Вот мой код:
objectView.setOnTouchListener { _, motionEvent ->
var velocityTracker: VelocityTracker? = null
when (motionEvent.actionMasked) {
MotionEvent.ACTION_DOWN -> {
motionEvent.actionIndex.also { pointerIndex ->
velocityTracker?.clear()
velocityTracker = velocityTracker ?: VelocityTracker.obtain()
velocityTracker?.addMovement(motionEvent)
touchX = motionEvent.getX(pointerIndex)
touchY = motionEvent.getY(pointerIndex)
}
}
MotionEvent.ACTION_MOVE -> {
objectView.x = motionEvent.rawX - touchX
objectView.y = motionEvent.rawY - touchY
}
MotionEvent.ACTION_UP -> {
liftTouchX = objectView.x
liftTouchY = objectView.y
velocityTracker?.computeCurrentVelocity(10)
val liftVelocityX = velocityTracker?.xVelocity
val liftVelocityY = velocityTracker?.yVelocity
velocityTracker?.recycle()
velocityTracker = null
}
}
true
}
Пока не реализовано свайпирование. Теперь в основном представление (objectView) свободно перемещается и следует за указателем пользователя на экране, пока оно не будет удалено. Когда его сбрасывают, у меня сохраняются скорости подъема в тех значениях, которые должны определять, сколько раз будет смахивать вид.
Это изображение описывает требуемое поведение:
Как я могу это сделать?