diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/doublepage/DoublePageHolder.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/doublepage/DoublePageHolder.kt index a537d3f08..aac9591bc 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/doublepage/DoublePageHolder.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/doublepage/DoublePageHolder.kt @@ -25,6 +25,10 @@ class DoublePageHolder( private val isEven: Boolean get() = bindingAdapterPosition and 1 == 0 + init { + binding.ssiv.panLimit = SubsamplingScaleImageView.PAN_LIMIT_INSIDE + } + override fun onBind(data: ReaderPage) { super.onBind(data) (binding.textViewNumber.layoutParams as FrameLayout.LayoutParams) @@ -41,7 +45,7 @@ class DoublePageHolder( minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE setScaleAndCenter( minScale, - PointF(if (isEven) sWidth.toFloat() else 0f, 0f), + PointF(if (isEven) 0f else sWidth.toFloat(), sHeight / 2f), ) } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/doublepage/DoublePageSnapHelper.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/doublepage/DoublePageSnapHelper.kt index 479f5b63e..024525222 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/doublepage/DoublePageSnapHelper.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/doublepage/DoublePageSnapHelper.kt @@ -158,7 +158,7 @@ class DoublePageSnapHelper : SnapHelper() { } private fun roundDownToBlockSize(trialPosition: Int): Int { - return trialPosition - trialPosition % blockSize + return trialPosition and 1.inv() } private fun roundUpToBlockSize(trialPosition: Int): Int { @@ -197,19 +197,17 @@ class DoublePageSnapHelper : SnapHelper() { private inner class LayoutDirectionHelper(direction: Int) { // Is the layout an RTL one? - private val mIsRTL: Boolean - - init { - mIsRTL = direction == View.LAYOUT_DIRECTION_RTL - } + private val isRTL = direction == View.LAYOUT_DIRECTION_RTL /* Calculate the amount of scroll needed to align the target view with the layout edge. */ fun getScrollToAlignView(targetView: View?): Int { - return if (mIsRTL) orientationHelper.getDecoratedEnd(targetView) - recyclerView.width else orientationHelper.getDecoratedStart( - targetView, - ) + return if (isRTL) { + orientationHelper.getDecoratedEnd(targetView) - recyclerView.width + } else { + orientationHelper.getDecoratedStart(targetView) + } } /** @@ -225,7 +223,7 @@ class DoublePageSnapHelper : SnapHelper() { val firstVisiblePos = layoutManager.findFirstVisibleItemPosition() if (layoutManager.canScrollHorizontally()) { if (targetPos <= firstVisiblePos) { // scrolling toward top of data - if (mIsRTL) { + if (isRTL) { val lastView = layoutManager.findViewByPosition(layoutManager.findLastVisibleItemPosition()) out[0] = (orientationHelper.getDecoratedEnd(lastView) + (firstVisiblePos - targetPos) * itemDimension) @@ -263,18 +261,20 @@ class DoublePageSnapHelper : SnapHelper() { if (scroll < 0) { positionsToMove *= -1 } - if (mIsRTL) { + if (isRTL) { positionsToMove *= -1 } return if (layoutDirectionHelper.isDirectionToBottom(scroll < 0)) { // Scrolling toward the bottom of data. roundDownToBlockSize(llm.findFirstVisibleItemPosition()) + positionsToMove - } else roundDownToBlockSize(llm.findLastVisibleItemPosition()) + positionsToMove + } else { + roundDownToBlockSize(llm.findLastVisibleItemPosition()) + positionsToMove + } // Scrolling toward the top of the data. } fun isDirectionToBottom(velocityNegative: Boolean): Boolean { - return if (mIsRTL) velocityNegative else !velocityNegative + return if (isRTL) velocityNegative else !velocityNegative } } }