这目前最好的调节才不会造成抖动 (#4855)

* ...

* ...

* ...
This commit is contained in:
lhjgege
2025-03-21 16:08:33 +08:00
committed by GitHub
parent 7f77fe0bd6
commit 2f15866634
3 changed files with 15 additions and 8 deletions
@@ -602,6 +602,5 @@ object ReadManga : CoroutineScope by MainScope() {
fun sureNewProgress(progress: BookProgress) fun sureNewProgress(progress: BookProgress)
fun showLoading() fun showLoading()
fun startLoad() fun startLoad()
fun scrollBy(delta: Int)
} }
} }
@@ -9,6 +9,7 @@ import android.view.KeyEvent
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.WindowManager import android.view.WindowManager
import android.view.animation.LinearInterpolator
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.isGone import androidx.core.view.isGone
@@ -76,7 +77,7 @@ import java.text.DecimalFormat
class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewModel>(), class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewModel>(),
ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack, ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack,
MangaColorFilterDialog.Callback { MangaColorFilterDialog.Callback, ScrollTimer.ScrollCallback {
private val mLayoutManager by lazy { private val mLayoutManager by lazy {
LinearLayoutManager(this) LinearLayoutManager(this)
@@ -120,6 +121,9 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
private lateinit var mScrollTimer: ScrollTimer private lateinit var mScrollTimer: ScrollTimer
private var enableAutoPageScroll = false private var enableAutoPageScroll = false
private var enableAutoScroll = false private var enableAutoScroll = false
private val mLinearInterpolator by lazy {
LinearInterpolator()
}
private val loadMoreView by lazy { private val loadMoreView by lazy {
LoadMoreView(this).apply { LoadMoreView(this).apply {
@@ -178,6 +182,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
?: MangaFooterConfig() ?: MangaFooterConfig()
mScrollTimer = ScrollTimer(this).apply { mScrollTimer = ScrollTimer(this).apply {
setSpeed(AppConfig.mangaAutoPageSpeed) setSpeed(AppConfig.mangaAutoPageSpeed)
callback = this@ReadMangaActivity
} }
} }
@@ -424,13 +429,13 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
} }
} }
override fun scrollBy(delta: Int) { override fun scrollBy(distance: Int) {
if (binding.mRecyclerManga.isAtBottom()) { if (binding.mRecyclerManga.isAtBottom()) {
return return
} }
binding.mRecyclerManga.smoothScrollBy( binding.mRecyclerManga.smoothScrollBy(
if (mAdapter.isHorizontal) delta else 0, if (mAdapter.isHorizontal) distance else 0,
if (mAdapter.isHorizontal) 0 else delta, null, 16 if (mAdapter.isHorizontal) 0 else distance, mLinearInterpolator, 16
) )
} }
@@ -13,9 +13,9 @@ class ScrollTimer(
) { ) {
private val coroutineScope = lifecycleOwner.lifecycleScope private val coroutineScope = lifecycleOwner.lifecycleScope
private var job: Job? = null private var job: Job? = null
private var delayMs: Long = 16L private var delayMs: Long = 20L
private var distance = 1 private var distance = 1
lateinit var callback: ScrollCallback
var isEnabled: Boolean = false var isEnabled: Boolean = false
set(value) { set(value) {
if (field != value) { if (field != value) {
@@ -37,10 +37,13 @@ class ScrollTimer(
} }
job = coroutineScope.launch { job = coroutineScope.launch {
while (isActive) { while (isActive) {
callback.scrollBy(distance)
delay(delayMs) delay(delayMs)
ReadManga.mCallback?.scrollBy(distance)
} }
} }
} }
interface ScrollCallback{
fun scrollBy(distance:Int)
}
} }