This commit is contained in:
Horis
2025-03-23 16:21:18 +08:00
parent 35cbb1fab8
commit 8c5c6242c6
2 changed files with 43 additions and 65 deletions
@@ -94,14 +94,9 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
PagerSnapHelper()
}
private var isAutoScrollPage = false
private var isAutoScroll = false
private var mMangaAutoPageSpeed = AppConfig.mangaAutoPageSpeed
private lateinit var mMangaFooterConfig: MangaFooterConfig
private val mLabelBuilder by lazy { StringBuilder() }
private var mMenu: Menu? = null
private var mRecyclerViewPreloader: RecyclerViewPreloader<Any>? = null
@@ -113,11 +108,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
private var justInitData: Boolean = false
private var syncDialog: AlertDialog? = null
private val mScrollTimer by lazy {
ScrollTimer(this, binding.mRecyclerManga, lifecycleScope).apply {
ScrollTimer(this, binding.recyclerView, lifecycleScope).apply {
setSpeed(AppConfig.mangaAutoPageSpeed)
}
}
private var enableAutoPageScroll = false
private var enableAutoScrollPage = false
private var enableAutoScroll = false
private val mLinearInterpolator by lazy {
LinearInterpolator()
@@ -183,7 +178,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
override fun observeLiveBus() {
observeEvent<MangaFooterConfig>(EventBus.UP_MANGA_CONFIG) {
mMangaFooterConfig = it
val item = mAdapter.getItem(binding.mRecyclerManga.findCenterViewPosition())
val item = mAdapter.getItem(binding.recyclerView.findCenterViewPosition())
upInfoBar(item)
}
}
@@ -194,14 +189,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
?: MangaColorFilterConfig()
mAdapter.setMangaImageColorFilter(mangaColorFilter)
setHorizontalScroll(AppConfig.enableMangaHorizontalScroll)
binding.mRecyclerManga.run {
binding.recyclerView.run {
adapter = mAdapter
itemAnimator = null
layoutManager = mLayoutManager
setHasFixedSize(true)
mLayoutManager.initialPrefetchItemCount = 4
mLayoutManager.isItemPrefetchEnabled = true
setItemViewCacheSize(AppConfig.preDownloadNum)
setDisableClickScroll(AppConfig.disableClickScroll)
setDisableMangaScale(AppConfig.disableMangaScale)
setRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
@@ -353,10 +345,10 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
ReadManga.syncProgress({ progress -> sureNewProgress(progress) })
}
}
if (isAutoScrollPage) {
if (enableAutoScrollPage) {
mScrollTimer.isEnabledPage = true
}
if (isAutoScroll) {
if (enableAutoScroll) {
mScrollTimer.isEnabled = true
}
}
@@ -426,11 +418,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
}
override fun scrollBy(distance: Int) {
if (binding.mRecyclerManga.isAtBottom()) {
if (binding.recyclerView.isAtEnd()) {
return
}
val time = ceil(16f / distance * 10000).toInt()
binding.mRecyclerManga.smoothScrollBy(10000, 10000, mLinearInterpolator, time)
binding.recyclerView.smoothScrollBy(10000, 10000, mLinearInterpolator, time)
}
override fun scrollPage() {
@@ -514,28 +506,23 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
R.id.menu_enable_auto_page -> {
item.isChecked = !item.isChecked
val menuMangaAutoPageSpeed = mMenu?.findItem(R.id.menu_manga_auto_page_speed)
isAutoScrollPage = item.isChecked
mScrollTimer.isEnabledPage = item.isChecked
menuMangaAutoPageSpeed?.isVisible = item.isChecked
enableAutoPageScroll = item.isChecked
enableAutoScrollPage = item.isChecked
enableAutoScroll = false
mScrollTimer.isEnabled = false
isAutoScroll = false
mMenu?.findItem(R.id.menu_enable_auto_scroll)?.isChecked = false
}
R.id.menu_manga_auto_page_speed -> {
val mangaAutoPage = mMenu?.findItem(R.id.menu_enable_auto_page)
// val mangaAutoScroll = mMenu?.findItem(R.id.menu_enable_auto_scroll)
showNumberPickerDialog(
1, getString(R.string.setting_manga_auto_page_speed),
AppConfig.mangaAutoPageSpeed
) {
AppConfig.mangaAutoPageSpeed = it
mMangaAutoPageSpeed = it
item.title = getString(R.string.manga_auto_page_speed, it)
mScrollTimer.setSpeed(it)
if (mangaAutoPage?.isChecked == true) {
if (enableAutoScrollPage) {
mScrollTimer.isEnabledPage = true
}
}
@@ -562,12 +549,14 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
mScrollTimer.isEnabled = item.isChecked
mMenu?.findItem(R.id.menu_enable_auto_page)?.isChecked = false
enableAutoScroll = item.isChecked
enableAutoPageScroll = false
isAutoScrollPage = false
isAutoScroll = item.isChecked
enableAutoScrollPage = false
mScrollTimer.isEnabledPage = false
mMenu?.findItem(R.id.menu_manga_auto_page_speed)?.isVisible = item.isChecked
mPagerSnapHelper.attachToRecyclerView(null)
if (enableAutoScroll) {
mPagerSnapHelper.attachToRecyclerView(null)
} else if (AppConfig.enableMangaHorizontalScroll) {
mPagerSnapHelper.attachToRecyclerView(binding.recyclerView)
}
}
}
return super.onCompatOptionsItemSelected(item)
@@ -587,7 +576,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
if (enableAutoScroll) {
mScrollTimer.isEnabled = !menuIsVisible
}
if (enableAutoPageScroll) {
if (enableAutoScrollPage) {
mScrollTimer.isEnabledPage = !menuIsVisible
}
}
@@ -612,19 +601,19 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
private fun setRecyclerViewPreloader(maxPreload: Int) {
if (mRecyclerViewPreloader != null) {
binding.mRecyclerManga.removeOnScrollListener(mRecyclerViewPreloader!!)
binding.recyclerView.removeOnScrollListener(mRecyclerViewPreloader!!)
}
mRecyclerViewPreloader = RecyclerViewPreloader(
Glide.with(this), mAdapter, mSizeProvider, maxPreload
)
binding.mRecyclerManga.addOnScrollListener(mRecyclerViewPreloader!!)
binding.recyclerView.addOnScrollListener(mRecyclerViewPreloader!!)
}
private fun setHorizontalScroll(enable: Boolean) {
mAdapter.isHorizontal = enable
if (enable) {
if (!enableAutoScroll) {
mPagerSnapHelper.attachToRecyclerView(binding.mRecyclerManga)
mPagerSnapHelper.attachToRecyclerView(binding.recyclerView)
}
mLayoutManager.orientation = LinearLayoutManager.HORIZONTAL
} else {
@@ -641,16 +630,16 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
menu.findItem(R.id.menu_disable_manga_scale).isChecked = AppConfig.disableMangaScale
menu.findItem(R.id.menu_disable_click_scroll).isChecked = AppConfig.disableClickScroll
menu.findItem(R.id.menu_manga_auto_page_speed).title =
getString(R.string.manga_auto_page_speed, mMangaAutoPageSpeed)
getString(R.string.manga_auto_page_speed, AppConfig.mangaAutoPageSpeed)
menu.findItem(R.id.menu_enable_horizontal_scroll).isChecked =
AppConfig.enableMangaHorizontalScroll
}
private fun setDisableMangaScale(disable: Boolean) {
binding.webtoonFrame.disableMangaScale = disable
binding.mRecyclerManga.disableMangaScale = disable
binding.recyclerView.disableMangaScale = disable
if (disable) {
binding.mRecyclerManga.resetZoom()
binding.recyclerView.resetZoom()
}
}
@@ -668,47 +657,39 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
}
private fun scrollToNext() {
if (binding.mRecyclerManga.isAtBottom()) {
if (binding.recyclerView.isAtEnd()) {
return
}
val dx: Int
val dy: Int
var dx = 0
var dy = 0
if (AppConfig.enableMangaHorizontalScroll) {
val width = binding.mRecyclerManga.run {
dx = binding.recyclerView.run {
width - paddingStart - paddingEnd
}
dx = width
dy = 0
} else {
val height = binding.mRecyclerManga.run {
dy = binding.recyclerView.run {
height - paddingTop - paddingBottom
}
dx = 0
dy = height
}
binding.mRecyclerManga.smoothScrollBy(dx, dy)
binding.recyclerView.smoothScrollBy(dx, dy)
}
private fun scrollToPrev() {
if (binding.mRecyclerManga.isAtTop()) {
if (binding.recyclerView.isAtStart()) {
return
}
val dx: Int
val dy: Int
var dx = 0
var dy = 0
if (AppConfig.enableMangaHorizontalScroll) {
val width = binding.mRecyclerManga.run {
dx = binding.recyclerView.run {
width - paddingStart - paddingEnd
}
dx = width
dy = 0
} else {
val height = binding.mRecyclerManga.run {
dy = binding.recyclerView.run {
height - paddingTop - paddingBottom
}
dx = 0
dy = height
}
binding.mRecyclerManga.smoothScrollBy(-dx, -dy)
binding.recyclerView.smoothScrollBy(-dx, -dy)
}
private fun showNumberPickerDialog(
@@ -750,15 +731,12 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
}
}
private fun RecyclerView.isAtTop(): Boolean {
return (mLayoutManager.findFirstCompletelyVisibleItemPosition() == 0)
&& !canScrollVertically(-1)
private fun RecyclerView.isAtStart(): Boolean {
return !canScrollVertically(-1) && !canScrollHorizontally(-1)
}
private fun RecyclerView.isAtBottom(): Boolean {
val adapter = adapter ?: return false
return (mLayoutManager.findLastCompletelyVisibleItemPosition() == adapter.itemCount - 1) &&
!canScrollVertically(1)
private fun RecyclerView.isAtEnd(): Boolean {
return !canScrollVertically(1) && !canScrollHorizontally(1)
}
fun updateWindowBrightness(brightness: Int) {
+4 -4
View File
@@ -6,12 +6,12 @@
android:layout_height="match_parent">
<io.legado.app.ui.book.manga.recyclerview.WebtoonFrame
android:id="@+id/webtoonFrame"
android:id="@+id/webtoon_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<io.legado.app.ui.book.manga.recyclerview.WebtoonRecyclerView
android:id="@+id/mRecyclerManga"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
@@ -29,7 +29,7 @@
tools:visibility="visible" />
<io.legado.app.ui.book.read.MangaMenu
android:id="@+id/mangaMenu"
android:id="@+id/manga_menu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
@@ -64,7 +64,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="正在加载中..."
android:text="@string/loading"
android:textColor="@color/primaryText" />
</LinearLayout>