Просмотр исходного кода

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

* ...

* ...

* ...
lhjgege 1 год назад
Родитель
Сommit
2f15866634

+ 0 - 1
app/src/main/java/io/legado/app/model/ReadManga.kt

@@ -602,6 +602,5 @@ object ReadManga : CoroutineScope by MainScope() {
         fun sureNewProgress(progress: BookProgress)
         fun showLoading()
         fun startLoad()
-        fun scrollBy(delta: Int)
     }
 }

+ 9 - 4
app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt

@@ -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
         )
     }
 

+ 6 - 3
app/src/main/java/io/legado/app/ui/book/manga/recyclerview/ScrollTimer.kt

@@ -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)
+    }
 }