From e13c12f00c1e5cdfa7e82857522743f2b55fa8dc Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Thu, 13 Nov 2025 08:36:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20#5537?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/model/ReadBook.kt | 9 ++++-- .../app/ui/book/read/ReadBookActivity.kt | 30 ++++++++++++++----- .../app/ui/book/read/ReadBookViewModel.kt | 2 +- .../app/ui/book/read/page/ContentTextView.kt | 4 +-- .../legado/app/ui/book/read/page/PageView.kt | 4 +-- .../legado/app/ui/book/read/page/ReadView.kt | 4 +-- 6 files changed, 36 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/ReadBook.kt b/app/src/main/java/io/legado/app/model/ReadBook.kt index 4d81bbb19..30ec6c6d4 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -447,10 +447,15 @@ object ReadBook : CoroutineScope by MainScope() { } } - fun openChapter(index: Int, durChapterPos: Int = 0, success: (() -> Unit)? = null) { + fun openChapter( + index: Int, + durChapterPos: Int = 0, + upContent: Boolean = true, + success: (() -> Unit)? = null + ) { if (index < chapterSize) { clearTextChapter() - callBack?.upContent() + if (upContent) callBack?.upContent() durChapterIndex = index ReadBook.durChapterPos = durChapterPos saveRead() diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 9ac88827e..fb6705500 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -1329,10 +1329,17 @@ class ReadBookActivity : BaseReadBookActivity(), ReadAloud.upReadAloudClass() val scrollPageAnim = ReadBook.pageAnim() == 3 if (scrollPageAnim) { - val line = binding.readView.getCurVisibleFirstLine() - if (line != null) { - ReadBook.durChapterPos = line.chapterPosition - ReadBook.readAloud(startPos = line.pagePosition) + val pos = binding.readView.getReadAloudPos() + if (pos != null) { + val (index, line) = pos + if (ReadBook.durChapterIndex != index) { + ReadBook.openChapter(index, line.chapterPosition, false) { + ReadBook.readAloud(startPos = line.pagePosition) + } + } else { + ReadBook.durChapterPos = line.chapterPosition + ReadBook.readAloud(startPos = line.pagePosition) + } } else { ReadBook.readAloud() } @@ -1345,10 +1352,17 @@ class ReadBookActivity : BaseReadBookActivity(), val scrollPageAnim = ReadBook.pageAnim() == 3 if (scrollPageAnim && pageChanged) { pageChanged = false - val line = binding.readView.getCurVisibleFirstLine() - if (line != null) { - ReadBook.durChapterPos = line.chapterPosition - ReadBook.readAloud(startPos = line.pagePosition) + val pos = binding.readView.getReadAloudPos() + if (pos != null) { + val (index, line) = pos + if (ReadBook.durChapterIndex != index) { + ReadBook.openChapter(index, line.chapterPosition, false) { + ReadBook.readAloud(startPos = line.pagePosition) + } + } else { + ReadBook.durChapterPos = line.chapterPosition + ReadBook.readAloud(startPos = line.pagePosition) + } } else { ReadBook.readAloud() } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 5bc82cbbe..7116dd248 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -328,7 +328,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } fun openChapter(index: Int, durChapterPos: Int = 0, success: (() -> Unit)? = null) { - ReadBook.openChapter(index, durChapterPos, success) + ReadBook.openChapter(index, durChapterPos, success = success) } fun removeFromBookshelf(success: (() -> Unit)?) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt index 782babcf3..8cb4351f6 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt @@ -449,7 +449,7 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at return visiblePage } - fun getCurVisibleFirstLine(): TextLine? { + fun getReadAloudPos(): Pair? { var relativeOffset: Float for (relativePos in 0..2) { relativeOffset = relativeOffset(relativePos) @@ -467,7 +467,7 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at lineTop += relativeOffset lineBottom += relativeOffset } - return visibleLine + return textPage.chapterIndex to visibleLine } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt index 82206ba82..e343afdff 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt @@ -426,8 +426,8 @@ class PageView(context: Context) : FrameLayout(context) { return binding.contentTextView.getCurVisiblePage() } - fun getCurVisibleFirstLine(): TextLine? { - return binding.contentTextView.getCurVisibleFirstLine() + fun getReadAloudPos(): Pair? { + return binding.contentTextView.getReadAloudPos() } fun markAsMainView() { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt index 7526aba85..6063076ee 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt @@ -675,8 +675,8 @@ class ReadView(context: Context, attrs: AttributeSet) : return curPage.getCurVisiblePage() } - fun getCurVisibleFirstLine(): TextLine? { - return curPage.getCurVisibleFirstLine() + fun getReadAloudPos(): Pair? { + return curPage.getReadAloudPos() } fun invalidateTextPage() {