Fix smooth page switching
This commit is contained in:
@@ -12,7 +12,9 @@ import org.koitharu.kotatsu.reader.ui.ReaderState
|
|||||||
import org.koitharu.kotatsu.reader.ui.pager.BaseReader
|
import org.koitharu.kotatsu.reader.ui.pager.BaseReader
|
||||||
import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter
|
import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter
|
||||||
import org.koitharu.kotatsu.reader.ui.pager.ReaderPage
|
import org.koitharu.kotatsu.reader.ui.pager.ReaderPage
|
||||||
|
import org.koitharu.kotatsu.reader.ui.pager.standard.PagerReaderFragment
|
||||||
import org.koitharu.kotatsu.utils.ext.*
|
import org.koitharu.kotatsu.utils.ext.*
|
||||||
|
import kotlin.math.absoluteValue
|
||||||
|
|
||||||
class ReversedReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
class ReversedReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
||||||
|
|
||||||
@@ -58,7 +60,10 @@ class ReversedReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun switchPageTo(position: Int, smooth: Boolean) {
|
override fun switchPageTo(position: Int, smooth: Boolean) {
|
||||||
binding.pager.setCurrentItem(reversed(position), smooth)
|
binding.pager.setCurrentItem(
|
||||||
|
reversed(position),
|
||||||
|
smooth && (binding.pager.currentItem - position).absoluteValue < PagerReaderFragment.SMOOTH_SCROLL_LIMIT
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPagesChanged(pages: List<ReaderPage>, pendingState: ReaderState?) {
|
override fun onPagesChanged(pages: List<ReaderPage>, pendingState: ReaderState?) {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.koitharu.kotatsu.reader.ui.pager.BaseReader
|
|||||||
import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter
|
import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter
|
||||||
import org.koitharu.kotatsu.reader.ui.pager.ReaderPage
|
import org.koitharu.kotatsu.reader.ui.pager.ReaderPage
|
||||||
import org.koitharu.kotatsu.utils.ext.*
|
import org.koitharu.kotatsu.utils.ext.*
|
||||||
|
import kotlin.math.absoluteValue
|
||||||
|
|
||||||
class PagerReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
class PagerReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
||||||
|
|
||||||
@@ -78,7 +79,10 @@ class PagerReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun switchPageTo(position: Int, smooth: Boolean) {
|
override fun switchPageTo(position: Int, smooth: Boolean) {
|
||||||
binding.pager.setCurrentItem(position, smooth)
|
binding.pager.setCurrentItem(
|
||||||
|
position,
|
||||||
|
smooth && (binding.pager.currentItem - position).absoluteValue < SMOOTH_SCROLL_LIMIT
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCurrentState(): ReaderState? = bindingOrNull()?.run {
|
override fun getCurrentState(): ReaderState? = bindingOrNull()?.run {
|
||||||
@@ -94,4 +98,9 @@ class PagerReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
|||||||
private fun notifyPageChanged(page: Int) {
|
private fun notifyPageChanged(page: Int) {
|
||||||
viewModel.onCurrentPageChanged(page)
|
viewModel.onCurrentPageChanged(page)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
const val SMOOTH_SCROLL_LIMIT = 3
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -88,10 +88,6 @@ class WebtoonReaderFragment : BaseReader<FragmentReaderWebtoonBinding>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun switchPageTo(position: Int, smooth: Boolean) {
|
override fun switchPageTo(position: Int, smooth: Boolean) {
|
||||||
if (smooth) {
|
binding.recyclerView.firstItem = position
|
||||||
binding.recyclerView.smoothScrollToPosition(position)
|
|
||||||
} else {
|
|
||||||
binding.recyclerView.firstItem = position
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user