优化
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user