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