kotlin, android - Значение аниматора и перевода Y не работает должным образом в направлении вниз, но работает должным образом в направлении вверх - PullRequest
0 голосов
/ 29 января 2020

Мне нужно сделать эффект перетаскивания для просмотра изображений, он имеет две позиции по умолчанию: в центре экрана и в нижней части экрана. Я попытался реализовать это с помощью onTouchListener, с помощью ACTION_MOVE я перетаскиваю изображение вверх и вниз, а с помощью ACTION_CANCEL я анимирую вид в центральной или нижней части экрана.

Проблема заключается в том, что при перетаскивании просмотр изображения вниз и анимация начинается, она начинается с верхней части экрана, а не с текущей позиции просмотра изображения. Этого не происходит, когда я перетаскиваю изображение вверх, в направлении вверх оно работает правильно. Вот код, который я использую в onTouchListener:

`menuBtn.setOnTouchListener (View.OnTouchListener (function = {view, motionEvent ->

        if (motionEvent.action == MotionEvent.ACTION_MOVE) {
            if (firstPass) {
                originalMenuY = menuBtn.absY()
                diameterToParentBottom = rootHeight - originalMenuY
                firstPass = false
            }
            newPosition = motionEvent.rawY - view.height / 2
            newPositionUp = motionEvent.rawY.toInt() - (view.height / 2)
            if (newPosition > originalMenuY) {
                view.y = newPosition
            }
            true
        }
        if (motionEvent.action == MotionEvent.ACTION_UP) {
            var valueAnimatorDown = ValueAnimator.ofInt(newPositionUp, rootHeight)
            val valueAnimatorUp = ValueAnimator.ofFloat(newPosition, originalMenuY + 0f)
            if (newPosition > originalMenuY) {
                if (newPosition < diameterToParentBottom / 1.4) {
                    valueAnimatorUp.duration = 600
                    valueAnimatorUp.addUpdateListener {
                        val animatedValueUp = it.animatedValue as Float
                        view.translationY = (animatedValueUp + 0f) - (view.height / 1.4f)
                    }
                    valueAnimatorUp.start()
                } else {
                    valueAnimatorDown.duration = 600
                    valueAnimatorDown.addUpdateListener {
                        val animatedValueDown = it.animatedValue as Int
                        view.translationY =
                            animatedValueDown - (view.height + (view.height / 1.4f))
                    }
                    valueAnimatorDown.start()
                }
            }
        }
        true
    }))`

При необходимости я могу предоставить другие части код. У кого-нибудь есть предложения?

...