增加开启自动翻页 (#4717)

* 增加点击屏幕下部分右边下一页,左部分上一页

* 优化

* 增加开启自动翻页

* ...

* 修改命名

* ...

* ...
This commit is contained in:
lhjgege
2025-02-19 15:16:17 +08:00
committed by GitHub
parent 15fa2f473d
commit 904933d864
12 changed files with 120 additions and 10 deletions
@@ -96,6 +96,7 @@ object PreferKey {
const val imageRetainNum = "imageRetainNum"
const val preDownloadNum = "preDownloadNum"
const val mangaPreDownloadNum = "mangaPreDownloadNum"
const val mangaAutoPageSpeed = "mangaAutoPageSpeed"
const val singlePageScrolling = "singlePageScrolling"
const val disableClickScroller = "disableClickScroller"
const val autoRefresh = "auto_refresh"
@@ -636,5 +636,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
set(value) {
appCtx.putPrefBoolean(PreferKey.disableClickScroller, value)
}
//漫画滚动速度
var mangaAutoPageSpeed
get() = appCtx.getPrefInt(PreferKey.mangaAutoPageSpeed, 3)
set(value) {
appCtx.putPrefInt(PreferKey.mangaAutoPageSpeed, value)
}
}
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.KeyEvent
import android.view.Menu
@@ -109,6 +110,22 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
}
}
}
private var mDisableAutoScrollPage = false
private val mInitMangaAutoPageSpeed by lazy {
AppConfig.mangaAutoPageSpeed
}
private var mMangaAutoPageSpeed = mInitMangaAutoPageSpeed
private val autoScrollHandler = Handler(Looper.getMainLooper())
private val autoScrollRunnable = object : Runnable {
override fun run() {
scrollToNext()
autoScrollHandler.postDelayed(this, mMangaAutoPageSpeed.times(1000L)) // 每3秒滑动一次
}
}
private var mMenu: Menu? = null
private var mRecyclerViewPreloader: RecyclerViewPreloader<Any>? = null
@@ -304,6 +321,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
ReadManga.syncProgress({ progress -> sureNewProgress(progress) })
}
}
startAutoPage()
}
override fun onPause() {
@@ -320,6 +338,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
}
}
networkChangedListener.unRegister()
stopAutoPage()
}
override fun loadComplete() {
@@ -413,16 +432,15 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
}
R.id.menu_pre_manga_number -> {
NumberPickerDialog(this)
.setTitle(getString(R.string.pre_download))
.setMaxValue(9999)
.setMinValue(0)
.setValue(AppConfig.mangaPreDownloadNum)
.show {
AppConfig.mangaPreDownloadNum = it
item.title = getString(R.string.pre_download_m, it)
addRecyclerViewPreloader(it)
}
showNumberPickerDialog(
0,
getString(R.string.pre_download),
AppConfig.mangaPreDownloadNum
) {
AppConfig.mangaPreDownloadNum = it
item.title = getString(R.string.pre_download_m, it)
addRecyclerViewPreloader(it)
}
}
R.id.menu_scroller_page -> {
@@ -442,6 +460,29 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
AppConfig.disableClickScroller = item.isChecked
disabledClickScroller(item.isChecked)
}
R.id.menu_enable_auto_page -> {
item.isChecked = !item.isChecked
val menuMangaAutoPageSpeed = mMenu?.findItem(R.id.menu_manga_auto_page_speed)
mDisableAutoScrollPage = item.isChecked
if (item.isChecked) {
startAutoPage()
menuMangaAutoPageSpeed?.isVisible = true
} else {
stopAutoPage()
menuMangaAutoPageSpeed?.isVisible = false
}
}
R.id.menu_manga_auto_page_speed -> {
showNumberPickerDialog(1,getString(R.string.setting_manga_auto_page_speed), 3) {
AppConfig.mangaAutoPageSpeed = it
mMangaAutoPageSpeed = it
item.title = getString(R.string.manga_auto_page_speed, it)
stopAutoPage()
startAutoPage()
}
}
}
return super.onCompatOptionsItemSelected(item)
}
@@ -497,11 +538,14 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
@SuppressLint("StringFormatMatches")
private fun upMenu(menu: Menu) {
this.mMenu = menu
menu.findItem(R.id.menu_pre_manga_number).title =
getString(R.string.pre_download_m, mPreDownloadNum)
menu.findItem(R.id.menu_scroller_page).isChecked = mSinglePageScroller
menu.findItem(R.id.menu_disable_manga_scaling).isChecked = mDisableMangaScaling
menu.findItem(R.id.menu_disable_click_scroller).isChecked = mDisableClickScroller
menu.findItem(R.id.menu_manga_auto_page_speed).title =
getString(R.string.manga_auto_page_speed, mMangaAutoPageSpeed)
}
private fun disableMangaScaling(disable: Boolean) {
@@ -556,4 +600,25 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
mSmoothScroller.targetPosition = position
mLayoutManager.startSmoothScroll(mSmoothScroller)
}
private fun startAutoPage() {
if (mDisableAutoScrollPage) {
autoScrollHandler.postDelayed(autoScrollRunnable, mMangaAutoPageSpeed.times(1000L))
}
}
private fun stopAutoPage() {
autoScrollHandler.removeCallbacks(autoScrollRunnable)
}
private fun showNumberPickerDialog(min:Int,title: String, initValue: Int, callback: (Int) -> Unit) {
NumberPickerDialog(this)
.setTitle(title)
.setMaxValue(9999)
.setMinValue(min)
.setValue(initValue)
.show {
callback.invoke(it)
}
}
}