@@ -97,6 +97,7 @@ object PreferKey {
|
||||
const val preDownloadNum = "preDownloadNum"
|
||||
const val mangaPreDownloadNum = "mangaPreDownloadNum"
|
||||
const val singlePageScrolling = "singlePageScrolling"
|
||||
const val disableClickScroller = "disableClickScroller"
|
||||
const val autoRefresh = "auto_refresh"
|
||||
const val defaultToRead = "defaultToRead"
|
||||
const val exportCharset = "exportCharset"
|
||||
|
||||
@@ -629,5 +629,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
set(value) {
|
||||
appCtx.putPrefBoolean(PreferKey.singlePageScrolling, value)
|
||||
}
|
||||
|
||||
//点击翻页
|
||||
var disableClickScroller
|
||||
get() = appCtx.getPrefBoolean(PreferKey.disableClickScroller, false)
|
||||
set(value) {
|
||||
appCtx.putPrefBoolean(PreferKey.disableClickScroller, value)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,13 +8,16 @@ import android.os.Looper
|
||||
import android.view.KeyEvent
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.viewModels
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.LinearSmoothScroller
|
||||
import androidx.recyclerview.widget.PagerSnapHelper
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader
|
||||
import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
|
||||
@@ -76,6 +79,18 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
||||
AppConfig.disableMangaScaling
|
||||
}
|
||||
|
||||
private val mDisableClickScroller by lazy {
|
||||
AppConfig.disableClickScroller
|
||||
}
|
||||
|
||||
private val mSmoothScroller by lazy {
|
||||
object : LinearSmoothScroller(this@ReadMangaActivity) {
|
||||
override fun getVerticalSnapPreference(): Int {
|
||||
return SNAP_TO_START
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val mSizeProvider by lazy {
|
||||
FixedPreloadSizeProvider<Any>(
|
||||
this@ReadMangaActivity.resources.displayMetrics.widthPixels, SIZE_ORIGINAL
|
||||
@@ -83,7 +98,16 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
||||
}
|
||||
|
||||
private val mPagerSnapHelper: PagerSnapHelper by lazy {
|
||||
PagerSnapHelper()
|
||||
object : PagerSnapHelper() {
|
||||
override fun calculateDistanceToFinalSnap(
|
||||
layoutManager: RecyclerView.LayoutManager,
|
||||
targetView: View
|
||||
): IntArray {
|
||||
val out = IntArray(2)
|
||||
out[1] = targetView.top - binding.mRecyclerMange.paddingTop
|
||||
return out
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var mRecyclerViewPreloader: RecyclerViewPreloader<Any>? = null
|
||||
@@ -138,6 +162,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
||||
mLayoutManager.isItemPrefetchEnabled = true
|
||||
setItemViewCacheSize(AppConfig.preDownloadNum)
|
||||
singlePagerScroller(mSinglePageScroller)
|
||||
disabledClickScroller(mDisableClickScroller)
|
||||
setPreScrollListener { _, _, dy, position ->
|
||||
if (dy > 0 && position + 2 > mAdapter.getCurrentList().size - 3) {
|
||||
if (mAdapter.getCurrentList().last() is ReaderLoading) {
|
||||
@@ -176,6 +201,12 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
||||
binding.mangaMenu.runMenuIn()
|
||||
}
|
||||
}
|
||||
onNextPage {
|
||||
scrollToNext()
|
||||
}
|
||||
onPrevPage {
|
||||
scrollToPrev()
|
||||
}
|
||||
}
|
||||
binding.tvRetry.setOnClickListener {
|
||||
binding.llLoading.isVisible = true
|
||||
@@ -405,6 +436,12 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
||||
AppConfig.disableMangaScaling = item.isChecked
|
||||
disableMangaScaling(item.isChecked)
|
||||
}
|
||||
|
||||
R.id.menu_disable_click_scroller -> {
|
||||
item.isChecked = !item.isChecked
|
||||
AppConfig.disableClickScroller = item.isChecked
|
||||
disabledClickScroller(item.isChecked)
|
||||
}
|
||||
}
|
||||
return super.onCompatOptionsItemSelected(item)
|
||||
}
|
||||
@@ -464,6 +501,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
||||
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
|
||||
}
|
||||
|
||||
private fun disableMangaScaling(disable: Boolean) {
|
||||
@@ -474,6 +512,10 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
||||
}
|
||||
}
|
||||
|
||||
private fun disabledClickScroller(disable: Boolean) {
|
||||
binding.mRecyclerMange.disabledClickScroller = disable
|
||||
}
|
||||
|
||||
private fun upLayoutInDisplayCutoutMode() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
window.attributes = window.attributes.apply {
|
||||
@@ -482,4 +524,36 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun scrollToNext() {
|
||||
val lastCompletelyVisiblePosition = mLayoutManager.findLastCompletelyVisibleItemPosition()
|
||||
val nextPosition = if (lastCompletelyVisiblePosition != RecyclerView.NO_POSITION) {
|
||||
lastCompletelyVisiblePosition + 1
|
||||
} else {
|
||||
mLayoutManager.findFirstVisibleItemPosition() + 1
|
||||
}
|
||||
if (nextPosition > mAdapter.getCurrentList().lastIndex) {
|
||||
return
|
||||
}
|
||||
smoothScrollToPosition(nextPosition)
|
||||
}
|
||||
|
||||
|
||||
private fun scrollToPrev() {
|
||||
val firstCompletelyVisiblePosition = mLayoutManager.findFirstCompletelyVisibleItemPosition()
|
||||
val prevPosition = if (firstCompletelyVisiblePosition != RecyclerView.NO_POSITION) {
|
||||
firstCompletelyVisiblePosition - 1
|
||||
} else {
|
||||
mLayoutManager.findFirstVisibleItemPosition() - 1
|
||||
}
|
||||
if (prevPosition < 0) {
|
||||
return
|
||||
}
|
||||
smoothScrollToPosition(prevPosition)
|
||||
}
|
||||
|
||||
private fun smoothScrollToPosition(position: Int) {
|
||||
mSmoothScroller.targetPosition = position
|
||||
mLayoutManager.startSmoothScroll(mSmoothScroller)
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
||||
var tapListener: ((MotionEvent) -> Unit)? = null
|
||||
var longTapListener: ((MotionEvent) -> Boolean)? = null
|
||||
var disableMangaScaling = false
|
||||
var disabledClickScroller = false
|
||||
|
||||
private var mToucheMiddle: (() -> Unit)? = null
|
||||
fun onToucheMiddle(init: () -> Unit) = apply { this.mToucheMiddle = init }
|
||||
@@ -256,11 +257,11 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
||||
mToucheMiddle?.invoke()
|
||||
}
|
||||
|
||||
blRect.contains(startX, startY) -> {
|
||||
blRect.contains(startX, startY) && !disabledClickScroller -> {
|
||||
mPrevPage?.invoke()
|
||||
}
|
||||
|
||||
brRect.contains(startX, startY) -> {
|
||||
brRect.contains(startX, startY) && !disabledClickScroller-> {
|
||||
mNextPage?.invoke()
|
||||
}
|
||||
|
||||
|
||||
@@ -37,4 +37,11 @@
|
||||
android:checked="false"
|
||||
android:title="@string/disable_manga_scaling"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_disable_click_scroller"
|
||||
android:checkable="true"
|
||||
android:checked="false"
|
||||
android:title="@string/disable_manga_click_scroller"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
|
||||
@@ -1184,6 +1184,7 @@
|
||||
<string name="theme_config">主题配置</string>
|
||||
<string name="show_mange_ui">漫画浏览</string>
|
||||
<string name="disable_manga_scaling">禁用漫画缩放</string>
|
||||
<string name="disable_manga_click_scroller">禁用点击翻页</string>
|
||||
<string name="book_reader_info_bar">页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%%</string>
|
||||
<string name="menu_download_after">Descargar el siguiente capítulo</string>
|
||||
<string name="menu_download_all">Descargar todos los capítulos</string>
|
||||
|
||||
@@ -1187,6 +1187,7 @@
|
||||
<string name="theme_config">主题配置</string>
|
||||
<string name="show_mange_ui">漫画浏览</string>
|
||||
<string name="disable_manga_scaling">禁用漫画缩放</string>
|
||||
<string name="disable_manga_click_scroller">禁用点击翻页</string>
|
||||
<string name="book_reader_info_bar">页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%%</string>
|
||||
<string name="menu_download_after">下载之后章节</string>
|
||||
<string name="menu_download_all">下载全部章节</string>
|
||||
|
||||
@@ -1187,6 +1187,7 @@
|
||||
<string name="theme_config">主题配置</string>
|
||||
<string name="show_mange_ui">漫画浏览</string>
|
||||
<string name="disable_manga_scaling">禁用漫画缩放</string>
|
||||
<string name="disable_manga_click_scroller">禁用点击翻页</string>
|
||||
<string name="book_reader_info_bar">页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%%</string>
|
||||
<string name="menu_download_after">Faça o download do próximo capítulo</string>
|
||||
<string name="menu_download_all">Download de todos os capítulos</string>
|
||||
|
||||
@@ -1183,6 +1183,7 @@ Còn </string>
|
||||
<string name="theme_config">主题配置</string>
|
||||
<string name="show_mange_ui">漫画浏览</string>
|
||||
<string name="disable_manga_scaling">禁用漫画缩放</string>
|
||||
<string name="disable_manga_click_scroller">禁用点击翻页</string>
|
||||
<string name="book_reader_info_bar">页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%%</string>
|
||||
<string name="menu_download_after">Tải xuống chương tiếp theo</string>
|
||||
<string name="menu_download_all">Tải xuống tất cả các chương</string>
|
||||
|
||||
@@ -1184,6 +1184,7 @@
|
||||
<string name="theme_config">主题配置</string>
|
||||
<string name="show_mange_ui">漫画浏览</string>
|
||||
<string name="disable_manga_scaling">禁用漫画缩放</string>
|
||||
<string name="disable_manga_click_scroller">禁用点击翻页</string>
|
||||
<string name="book_reader_info_bar">页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%%</string>
|
||||
<string name="menu_download_after">下載之後章節</string>
|
||||
<string name="menu_download_all">下載全部章節</string>
|
||||
|
||||
@@ -1186,6 +1186,7 @@
|
||||
<string name="theme_config">主题配置</string>
|
||||
<string name="show_mange_ui">漫画浏览</string>
|
||||
<string name="disable_manga_scaling">禁用漫画缩放</string>
|
||||
<string name="disable_manga_click_scroller">禁用点击翻页</string>
|
||||
<string name="book_reader_info_bar">页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%%</string>
|
||||
<string name="menu_download_after">下載之後章節</string>
|
||||
<string name="menu_download_all">下載全部章節</string>
|
||||
|
||||
@@ -1186,6 +1186,7 @@
|
||||
<string name="theme_config">主题配置</string>
|
||||
<string name="show_mange_ui">漫画浏览</string>
|
||||
<string name="disable_manga_scaling">禁用漫画缩放</string>
|
||||
<string name="disable_manga_click_scroller">禁用点击翻页</string>
|
||||
<string name="book_reader_info_bar">页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%%</string>
|
||||
<string name="menu_download_after">下载之后章节</string>
|
||||
<string name="menu_download_all">下载全部章节</string>
|
||||
|
||||
@@ -1187,6 +1187,7 @@
|
||||
<string name="theme_config">主题配置</string>
|
||||
<string name="show_mange_ui">漫画浏览</string>
|
||||
<string name="disable_manga_scaling">禁用漫画缩放</string>
|
||||
<string name="disable_manga_click_scroller">禁用点击翻页</string>
|
||||
<string name="book_reader_info_bar">页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%%</string>
|
||||
<string name="menu_download_after">Download the chapter after</string>
|
||||
<string name="menu_download_all">Download all chapter</string>
|
||||
|
||||
Reference in New Issue
Block a user