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

* ...

* ...

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