Fix reader animation changes
This commit is contained in:
@@ -31,5 +31,5 @@ abstract class BasePageHolder<B : ViewBinding>(
|
|||||||
|
|
||||||
protected abstract fun onBind(data: ReaderPage)
|
protected abstract fun onBind(data: ReaderPage)
|
||||||
|
|
||||||
protected open fun onRecycled() = Unit
|
open fun onRecycled() = Unit
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,7 @@ import androidx.recyclerview.widget.DiffUtil
|
|||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
import org.koitharu.kotatsu.reader.ui.PageLoader
|
import org.koitharu.kotatsu.reader.ui.PageLoader
|
||||||
|
import org.koitharu.kotatsu.utils.ext.resetTransformations
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
import kotlin.coroutines.suspendCoroutine
|
import kotlin.coroutines.suspendCoroutine
|
||||||
|
|
||||||
@@ -24,6 +25,12 @@ abstract class BaseReaderAdapter<H : BasePageHolder<*>>(
|
|||||||
holder.bind(differ.currentList[position])
|
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 getItem(position: Int): ReaderPage = differ.currentList[position]
|
||||||
|
|
||||||
open fun getItemOrNull(position: Int) = differ.currentList.getOrNull(position)
|
open fun getItemOrNull(position: Int) = differ.currentList.getOrNull(position)
|
||||||
|
|||||||
@@ -17,8 +17,7 @@ class PageHolderDelegate(
|
|||||||
private val loader: PageLoader,
|
private val loader: PageLoader,
|
||||||
private val settings: AppSettings,
|
private val settings: AppSettings,
|
||||||
private val callback: Callback
|
private val callback: Callback
|
||||||
) : SubsamplingScaleImageView.DefaultOnImageEventListener(),
|
) : SubsamplingScaleImageView.DefaultOnImageEventListener(), CoroutineScope by loader {
|
||||||
CoroutineScope by loader {
|
|
||||||
|
|
||||||
private var state = State.EMPTY
|
private var state = State.EMPTY
|
||||||
private var job: Job? = null
|
private var job: Job? = null
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.core.view.children
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import org.koin.android.ext.android.get
|
import org.koin.android.ext.android.get
|
||||||
import org.koitharu.kotatsu.databinding.FragmentReaderStandardBinding
|
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.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.callOnPageChaneListeners
|
import org.koitharu.kotatsu.utils.ext.*
|
||||||
import org.koitharu.kotatsu.utils.ext.doOnPageChanged
|
|
||||||
import org.koitharu.kotatsu.utils.ext.swapAdapter
|
|
||||||
import org.koitharu.kotatsu.utils.ext.viewLifecycleScope
|
|
||||||
|
|
||||||
class ReversedReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
class ReversedReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
||||||
|
|
||||||
@@ -30,13 +28,18 @@ class ReversedReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
|||||||
pagerAdapter = ReversedPagesAdapter(loader, get())
|
pagerAdapter = ReversedPagesAdapter(loader, get())
|
||||||
with(binding.pager) {
|
with(binding.pager) {
|
||||||
adapter = pagerAdapter
|
adapter = pagerAdapter
|
||||||
offscreenPageLimit = 2
|
offscreenPageLimit = 1
|
||||||
doOnPageChanged(::notifyPageChanged)
|
doOnPageChanged(::notifyPageChanged)
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModel.readerAnimation.observe(viewLifecycleOwner) {
|
viewModel.readerAnimation.observe(viewLifecycleOwner) {
|
||||||
val transformer = if (it) ReversedPageAnimTransformer() else null
|
val transformer = if (it) ReversedPageAnimTransformer() else null
|
||||||
binding.pager.setPageTransformer(transformer)
|
binding.pager.setPageTransformer(transformer)
|
||||||
|
if (transformer == null) {
|
||||||
|
binding.pager.recyclerView?.children?.forEach {
|
||||||
|
it.resetTransformations()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
viewModel.onZoomChanged.observe(viewLifecycleOwner) {
|
viewModel.onZoomChanged.observe(viewLifecycleOwner) {
|
||||||
pagerAdapter = ReversedPagesAdapter(loader, get())
|
pagerAdapter = ReversedPagesAdapter(loader, get())
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.core.view.children
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import org.koin.android.ext.android.get
|
import org.koin.android.ext.android.get
|
||||||
import org.koitharu.kotatsu.databinding.FragmentReaderStandardBinding
|
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.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.callOnPageChaneListeners
|
import org.koitharu.kotatsu.utils.ext.*
|
||||||
import org.koitharu.kotatsu.utils.ext.doOnPageChanged
|
|
||||||
import org.koitharu.kotatsu.utils.ext.swapAdapter
|
|
||||||
import org.koitharu.kotatsu.utils.ext.viewLifecycleScope
|
|
||||||
|
|
||||||
class PagerReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
class PagerReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
||||||
|
|
||||||
@@ -30,13 +28,18 @@ class PagerReaderFragment : BaseReader<FragmentReaderStandardBinding>() {
|
|||||||
pagesAdapter = PagesAdapter(loader, get())
|
pagesAdapter = PagesAdapter(loader, get())
|
||||||
with(binding.pager) {
|
with(binding.pager) {
|
||||||
adapter = pagesAdapter
|
adapter = pagesAdapter
|
||||||
offscreenPageLimit = 2
|
offscreenPageLimit = 1
|
||||||
doOnPageChanged(::notifyPageChanged)
|
doOnPageChanged(::notifyPageChanged)
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModel.readerAnimation.observe(viewLifecycleOwner) {
|
viewModel.readerAnimation.observe(viewLifecycleOwner) {
|
||||||
val transformer = if (it) PageAnimTransformer() else null
|
val transformer = if (it) PageAnimTransformer() else null
|
||||||
binding.pager.setPageTransformer(transformer)
|
binding.pager.setPageTransformer(transformer)
|
||||||
|
if (transformer == null) {
|
||||||
|
binding.pager.recyclerView?.children?.forEach {
|
||||||
|
it.resetTransformations()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
viewModel.onZoomChanged.observe(viewLifecycleOwner) {
|
viewModel.onZoomChanged.observe(viewLifecycleOwner) {
|
||||||
pagesAdapter = PagesAdapter(loader, get())
|
pagesAdapter = PagesAdapter(loader, get())
|
||||||
|
|||||||
@@ -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) {
|
inline fun RecyclerView.doOnCurrentItemChanged(crossinline callback: (Int) -> Unit) {
|
||||||
addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<dimen name="grid_spacing">8dp</dimen>
|
<dimen name="grid_spacing">7dp</dimen>
|
||||||
<dimen name="preferred_grid_width">140dp</dimen>
|
<dimen name="preferred_grid_width">140dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<dimen name="grid_spacing">6dp</dimen>
|
<dimen name="grid_spacing">5dp</dimen>
|
||||||
<dimen name="manga_list_item_height">84dp</dimen>
|
<dimen name="manga_list_item_height">84dp</dimen>
|
||||||
<dimen name="manga_list_details_item_height">120dp</dimen>
|
<dimen name="manga_list_details_item_height">120dp</dimen>
|
||||||
<dimen name="chapter_list_item_height">46dp</dimen>
|
<dimen name="chapter_list_item_height">46dp</dimen>
|
||||||
|
|||||||
Reference in New Issue
Block a user