Android: Как провести взглядом и замедлить его до остановки? - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь заставить вид переместиться в любом направлении и заставить его замедляться, пока не остановится. Размах должен быть выполнен в любом направлении, а не только по оси ВВЕРХ, ВНИЗ, ВЛЕВО и ВПРАВО. Кроме того, скорость должна определять, как сильно скользит изображение после того, как пользователь убрал палец с дисплея.

Вот мой код:

 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) свободно перемещается и следует за указателем пользователя на экране, пока оно не будет удалено. Когда его сбрасывают, у меня сохраняются скорости подъема в тех значениях, которые должны определять, сколько раз будет смахивать вид.

Это изображение описывает требуемое поведение:

enter image description here

Как я могу это сделать?

...