Мне нужно сделать эффект перетаскивания для просмотра изображений, он имеет две позиции по умолчанию: в центре экрана и в нижней части экрана. Я попытался реализовать это с помощью 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
}))`
При необходимости я могу предоставить другие части код. У кого-нибудь есть предложения?