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