@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user