diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BasePageHolder.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BasePageHolder.kt index 7d1bed977..9ff16dd08 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BasePageHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BasePageHolder.kt @@ -31,5 +31,5 @@ abstract class BasePageHolder( protected abstract fun onBind(data: ReaderPage) - protected open fun onRecycled() = Unit + open fun onRecycled() = Unit } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReaderAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReaderAdapter.kt index 67f1781de..a426718b7 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReaderAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReaderAdapter.kt @@ -6,6 +6,7 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.reader.ui.PageLoader +import org.koitharu.kotatsu.utils.ext.resetTransformations import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine @@ -24,6 +25,12 @@ abstract class BaseReaderAdapter>( holder.bind(differ.currentList[position]) } + override fun onViewRecycled(holder: H) { + holder.onRecycled() + holder.itemView.resetTransformations() + super.onViewRecycled(holder) + } + open fun getItem(position: Int): ReaderPage = differ.currentList[position] open fun getItemOrNull(position: Int) = differ.currentList.getOrNull(position) diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt index dfc4b2295..283318446 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt @@ -17,8 +17,7 @@ class PageHolderDelegate( private val loader: PageLoader, private val settings: AppSettings, private val callback: Callback -) : SubsamplingScaleImageView.DefaultOnImageEventListener(), - CoroutineScope by loader { +) : SubsamplingScaleImageView.DefaultOnImageEventListener(), CoroutineScope by loader { private var state = State.EMPTY private var job: Job? = null diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt index 2c834736e..79d3ae50c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.children import kotlinx.coroutines.async import org.koin.android.ext.android.get import org.koitharu.kotatsu.databinding.FragmentReaderStandardBinding @@ -11,10 +12,7 @@ import org.koitharu.kotatsu.reader.ui.ReaderState import org.koitharu.kotatsu.reader.ui.pager.BaseReader import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter import org.koitharu.kotatsu.reader.ui.pager.ReaderPage -import org.koitharu.kotatsu.utils.ext.callOnPageChaneListeners -import org.koitharu.kotatsu.utils.ext.doOnPageChanged -import org.koitharu.kotatsu.utils.ext.swapAdapter -import org.koitharu.kotatsu.utils.ext.viewLifecycleScope +import org.koitharu.kotatsu.utils.ext.* class ReversedReaderFragment : BaseReader() { @@ -30,13 +28,18 @@ class ReversedReaderFragment : BaseReader() { pagerAdapter = ReversedPagesAdapter(loader, get()) with(binding.pager) { adapter = pagerAdapter - offscreenPageLimit = 2 + offscreenPageLimit = 1 doOnPageChanged(::notifyPageChanged) } viewModel.readerAnimation.observe(viewLifecycleOwner) { val transformer = if (it) ReversedPageAnimTransformer() else null binding.pager.setPageTransformer(transformer) + if (transformer == null) { + binding.pager.recyclerView?.children?.forEach { + it.resetTransformations() + } + } } viewModel.onZoomChanged.observe(viewLifecycleOwner) { pagerAdapter = ReversedPagesAdapter(loader, get()) diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt index 685e44898..58b335d3f 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.children import kotlinx.coroutines.async import org.koin.android.ext.android.get import org.koitharu.kotatsu.databinding.FragmentReaderStandardBinding @@ -11,10 +12,7 @@ import org.koitharu.kotatsu.reader.ui.ReaderState import org.koitharu.kotatsu.reader.ui.pager.BaseReader import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter import org.koitharu.kotatsu.reader.ui.pager.ReaderPage -import org.koitharu.kotatsu.utils.ext.callOnPageChaneListeners -import org.koitharu.kotatsu.utils.ext.doOnPageChanged -import org.koitharu.kotatsu.utils.ext.swapAdapter -import org.koitharu.kotatsu.utils.ext.viewLifecycleScope +import org.koitharu.kotatsu.utils.ext.* class PagerReaderFragment : BaseReader() { @@ -30,13 +28,18 @@ class PagerReaderFragment : BaseReader() { pagesAdapter = PagesAdapter(loader, get()) with(binding.pager) { adapter = pagesAdapter - offscreenPageLimit = 2 + offscreenPageLimit = 1 doOnPageChanged(::notifyPageChanged) } viewModel.readerAnimation.observe(viewLifecycleOwner) { val transformer = if (it) PageAnimTransformer() else null binding.pager.setPageTransformer(transformer) + if (transformer == null) { + binding.pager.recyclerView?.children?.forEach { + it.resetTransformations() + } + } } viewModel.onZoomChanged.observe(viewLifecycleOwner) { pagesAdapter = PagesAdapter(loader, get()) diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt index bdc677f24..a5eae2020 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt @@ -149,6 +149,18 @@ inline fun ViewPager2.doOnPageChanged(crossinline callback: (Int) -> Unit) { }) } +val ViewPager2.recyclerView: RecyclerView? + get() = children.find { it is RecyclerView } as? RecyclerView + +fun View.resetTransformations() { + alpha = 1f + translationX = 0f + translationY = 0f + translationZ = 0f + scaleX = 1f + scaleY = 1f +} + inline fun RecyclerView.doOnCurrentItemChanged(crossinline callback: (Int) -> Unit) { addOnScrollListener(object : RecyclerView.OnScrollListener() { diff --git a/app/src/main/res/values-w600dp/dimens.xml b/app/src/main/res/values-w600dp/dimens.xml index b871f1600..10126d05c 100644 --- a/app/src/main/res/values-w600dp/dimens.xml +++ b/app/src/main/res/values-w600dp/dimens.xml @@ -1,5 +1,5 @@ - 8dp + 7dp 140dp \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index a23105582..f47905595 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,6 +1,6 @@ - 6dp + 5dp 84dp 120dp 46dp