Prevent scrolling outside bounds in webtoon/vertical reading mode (#8821)

This commit is contained in:
Verzaukeks 2023-01-15 00:38:52 +01:00 committed by GitHub
parent 6fe650319d
commit 992bab4f79
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -106,7 +106,8 @@ class WebtoonRecyclerView @JvmOverloads constructor(
val scaleAnimator = ValueAnimator.ofFloat(fromRate, toRate)
scaleAnimator.addUpdateListener { animation ->
setScaleRate(animation.animatedValue as Float)
currentScale = animation.animatedValue as Float
setScaleRate(currentScale)
}
animatorSet.playTogether(translationXAnimator, translationYAnimator, scaleAnimator)
animatorSet.duration = ANIMATOR_DURATION_TIME.toLong()
@ -122,26 +123,26 @@ class WebtoonRecyclerView @JvmOverloads constructor(
if (currentScale <= 1f) return false
val distanceTimeFactor = 0.4f
var newX: Float? = null
var newY: Float? = null
val animatorSet = AnimatorSet()
if (velocityX != 0) {
val dx = (distanceTimeFactor * velocityX / 2)
newX = getPositionX(x + dx)
val newX = getPositionX(x + dx)
val translationXAnimator = ValueAnimator.ofFloat(x, newX)
translationXAnimator.addUpdateListener { animation -> x = getPositionX(animation.animatedValue as Float) }
animatorSet.play(translationXAnimator)
}
if (velocityY != 0 && (atFirstPosition || atLastPosition)) {
val dy = (distanceTimeFactor * velocityY / 2)
newY = getPositionY(y + dy)
val newY = getPositionY(y + dy)
val translationYAnimator = ValueAnimator.ofFloat(y, newY)
translationYAnimator.addUpdateListener { animation -> y = getPositionY(animation.animatedValue as Float) }
animatorSet.play(translationYAnimator)
}
animate()
.apply {
newX?.let { x(it) }
newY?.let { y(it) }
}
.setInterpolator(DecelerateInterpolator())
.setDuration(400)
.start()
animatorSet.duration = 400
animatorSet.interpolator = DecelerateInterpolator()
animatorSet.start()
return true
}