@@ -97,6 +97,7 @@ object PreferKey {
|
|||||||
const val preDownloadNum = "preDownloadNum"
|
const val preDownloadNum = "preDownloadNum"
|
||||||
const val mangaPreDownloadNum = "mangaPreDownloadNum"
|
const val mangaPreDownloadNum = "mangaPreDownloadNum"
|
||||||
const val singlePageScrolling = "singlePageScrolling"
|
const val singlePageScrolling = "singlePageScrolling"
|
||||||
|
const val disableClickScroller = "disableClickScroller"
|
||||||
const val autoRefresh = "auto_refresh"
|
const val autoRefresh = "auto_refresh"
|
||||||
const val defaultToRead = "defaultToRead"
|
const val defaultToRead = "defaultToRead"
|
||||||
const val exportCharset = "exportCharset"
|
const val exportCharset = "exportCharset"
|
||||||
|
|||||||
@@ -629,5 +629,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
|||||||
set(value) {
|
set(value) {
|
||||||
appCtx.putPrefBoolean(PreferKey.singlePageScrolling, 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.KeyEvent
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
|
import android.view.View
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
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
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import androidx.recyclerview.widget.LinearSmoothScroller
|
||||||
import androidx.recyclerview.widget.PagerSnapHelper
|
import androidx.recyclerview.widget.PagerSnapHelper
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader
|
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader
|
||||||
import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
|
import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
|
||||||
@@ -76,6 +79,18 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
|||||||
AppConfig.disableMangaScaling
|
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 {
|
private val mSizeProvider by lazy {
|
||||||
FixedPreloadSizeProvider<Any>(
|
FixedPreloadSizeProvider<Any>(
|
||||||
this@ReadMangaActivity.resources.displayMetrics.widthPixels, SIZE_ORIGINAL
|
this@ReadMangaActivity.resources.displayMetrics.widthPixels, SIZE_ORIGINAL
|
||||||
@@ -83,7 +98,16 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val mPagerSnapHelper: PagerSnapHelper by lazy {
|
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
|
private var mRecyclerViewPreloader: RecyclerViewPreloader<Any>? = null
|
||||||
@@ -138,6 +162,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
|||||||
mLayoutManager.isItemPrefetchEnabled = true
|
mLayoutManager.isItemPrefetchEnabled = true
|
||||||
setItemViewCacheSize(AppConfig.preDownloadNum)
|
setItemViewCacheSize(AppConfig.preDownloadNum)
|
||||||
singlePagerScroller(mSinglePageScroller)
|
singlePagerScroller(mSinglePageScroller)
|
||||||
|
disabledClickScroller(mDisableClickScroller)
|
||||||
setPreScrollListener { _, _, dy, position ->
|
setPreScrollListener { _, _, dy, position ->
|
||||||
if (dy > 0 && position + 2 > mAdapter.getCurrentList().size - 3) {
|
if (dy > 0 && position + 2 > mAdapter.getCurrentList().size - 3) {
|
||||||
if (mAdapter.getCurrentList().last() is ReaderLoading) {
|
if (mAdapter.getCurrentList().last() is ReaderLoading) {
|
||||||
@@ -176,6 +201,12 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
|||||||
binding.mangaMenu.runMenuIn()
|
binding.mangaMenu.runMenuIn()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
onNextPage {
|
||||||
|
scrollToNext()
|
||||||
|
}
|
||||||
|
onPrevPage {
|
||||||
|
scrollToPrev()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
binding.tvRetry.setOnClickListener {
|
binding.tvRetry.setOnClickListener {
|
||||||
binding.llLoading.isVisible = true
|
binding.llLoading.isVisible = true
|
||||||
@@ -405,6 +436,12 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
|||||||
AppConfig.disableMangaScaling = item.isChecked
|
AppConfig.disableMangaScaling = item.isChecked
|
||||||
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)
|
return super.onCompatOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
@@ -464,6 +501,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>()
|
|||||||
getString(R.string.pre_download_m, mPreDownloadNum)
|
getString(R.string.pre_download_m, mPreDownloadNum)
|
||||||
menu.findItem(R.id.menu_scroller_page).isChecked = mSinglePageScroller
|
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_manga_scaling).isChecked = mDisableMangaScaling
|
||||||
|
menu.findItem(R.id.menu_disable_click_scroller).isChecked = mDisableClickScroller
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun disableMangaScaling(disable: Boolean) {
|
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() {
|
private fun upLayoutInDisplayCutoutMode() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
window.attributes = window.attributes.apply {
|
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 tapListener: ((MotionEvent) -> Unit)? = null
|
||||||
var longTapListener: ((MotionEvent) -> Boolean)? = null
|
var longTapListener: ((MotionEvent) -> Boolean)? = null
|
||||||
var disableMangaScaling = false
|
var disableMangaScaling = false
|
||||||
|
var disabledClickScroller = false
|
||||||
|
|
||||||
private var mToucheMiddle: (() -> Unit)? = null
|
private var mToucheMiddle: (() -> Unit)? = null
|
||||||
fun onToucheMiddle(init: () -> Unit) = apply { this.mToucheMiddle = init }
|
fun onToucheMiddle(init: () -> Unit) = apply { this.mToucheMiddle = init }
|
||||||
@@ -256,11 +257,11 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
|||||||
mToucheMiddle?.invoke()
|
mToucheMiddle?.invoke()
|
||||||
}
|
}
|
||||||
|
|
||||||
blRect.contains(startX, startY) -> {
|
blRect.contains(startX, startY) && !disabledClickScroller -> {
|
||||||
mPrevPage?.invoke()
|
mPrevPage?.invoke()
|
||||||
}
|
}
|
||||||
|
|
||||||
brRect.contains(startX, startY) -> {
|
brRect.contains(startX, startY) && !disabledClickScroller-> {
|
||||||
mNextPage?.invoke()
|
mNextPage?.invoke()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,4 +37,11 @@
|
|||||||
android:checked="false"
|
android:checked="false"
|
||||||
android:title="@string/disable_manga_scaling"
|
android:title="@string/disable_manga_scaling"
|
||||||
app:showAsAction="never" />
|
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>
|
</menu>
|
||||||
|
|||||||
@@ -1184,6 +1184,7 @@
|
|||||||
<string name="theme_config">主题配置</string>
|
<string name="theme_config">主题配置</string>
|
||||||
<string name="show_mange_ui">漫画浏览</string>
|
<string name="show_mange_ui">漫画浏览</string>
|
||||||
<string name="disable_manga_scaling">禁用漫画缩放</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="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_after">Descargar el siguiente capítulo</string>
|
||||||
<string name="menu_download_all">Descargar todos los capítulos</string>
|
<string name="menu_download_all">Descargar todos los capítulos</string>
|
||||||
|
|||||||
@@ -1187,6 +1187,7 @@
|
|||||||
<string name="theme_config">主题配置</string>
|
<string name="theme_config">主题配置</string>
|
||||||
<string name="show_mange_ui">漫画浏览</string>
|
<string name="show_mange_ui">漫画浏览</string>
|
||||||
<string name="disable_manga_scaling">禁用漫画缩放</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="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_after">下载之后章节</string>
|
||||||
<string name="menu_download_all">下载全部章节</string>
|
<string name="menu_download_all">下载全部章节</string>
|
||||||
|
|||||||
@@ -1187,6 +1187,7 @@
|
|||||||
<string name="theme_config">主题配置</string>
|
<string name="theme_config">主题配置</string>
|
||||||
<string name="show_mange_ui">漫画浏览</string>
|
<string name="show_mange_ui">漫画浏览</string>
|
||||||
<string name="disable_manga_scaling">禁用漫画缩放</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="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_after">Faça o download do próximo capítulo</string>
|
||||||
<string name="menu_download_all">Download de todos os capítulos</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="theme_config">主题配置</string>
|
||||||
<string name="show_mange_ui">漫画浏览</string>
|
<string name="show_mange_ui">漫画浏览</string>
|
||||||
<string name="disable_manga_scaling">禁用漫画缩放</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="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_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>
|
<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="theme_config">主题配置</string>
|
||||||
<string name="show_mange_ui">漫画浏览</string>
|
<string name="show_mange_ui">漫画浏览</string>
|
||||||
<string name="disable_manga_scaling">禁用漫画缩放</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="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_after">下載之後章節</string>
|
||||||
<string name="menu_download_all">下載全部章節</string>
|
<string name="menu_download_all">下載全部章節</string>
|
||||||
|
|||||||
@@ -1186,6 +1186,7 @@
|
|||||||
<string name="theme_config">主题配置</string>
|
<string name="theme_config">主题配置</string>
|
||||||
<string name="show_mange_ui">漫画浏览</string>
|
<string name="show_mange_ui">漫画浏览</string>
|
||||||
<string name="disable_manga_scaling">禁用漫画缩放</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="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_after">下載之後章節</string>
|
||||||
<string name="menu_download_all">下載全部章節</string>
|
<string name="menu_download_all">下載全部章節</string>
|
||||||
|
|||||||
@@ -1186,6 +1186,7 @@
|
|||||||
<string name="theme_config">主题配置</string>
|
<string name="theme_config">主题配置</string>
|
||||||
<string name="show_mange_ui">漫画浏览</string>
|
<string name="show_mange_ui">漫画浏览</string>
|
||||||
<string name="disable_manga_scaling">禁用漫画缩放</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="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_after">下载之后章节</string>
|
||||||
<string name="menu_download_all">下载全部章节</string>
|
<string name="menu_download_all">下载全部章节</string>
|
||||||
|
|||||||
@@ -1187,6 +1187,7 @@
|
|||||||
<string name="theme_config">主题配置</string>
|
<string name="theme_config">主题配置</string>
|
||||||
<string name="show_mange_ui">漫画浏览</string>
|
<string name="show_mange_ui">漫画浏览</string>
|
||||||
<string name="disable_manga_scaling">禁用漫画缩放</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="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_after">Download the chapter after</string>
|
||||||
<string name="menu_download_all">Download all chapter</string>
|
<string name="menu_download_all">Download all chapter</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user