diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt index 963639e73..53724ae85 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt @@ -79,8 +79,8 @@ data class TextLine( } } - fun getColumnReverseAt(index: Int): BaseColumn { - return textColumns[textColumns.lastIndex - index] + fun getColumnReverseAt(index: Int, offset: Int = 0): BaseColumn { + return textColumns[textColumns.lastIndex - offset - index] } fun getColumnsCount(): Int { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/TextChapterLayout.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/TextChapterLayout.kt index 4d097077e..24e5d9cdf 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/TextChapterLayout.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/TextChapterLayout.kt @@ -622,7 +622,7 @@ class TextChapterLayout( val spaceSize = words.count { it == " " } textLine.startX = absStartX + startX if (spaceSize > 1) { - val d = residualWidth / (spaceSize - 1) + val d = residualWidth / spaceSize textLine.wordSpacing = d var x = startX for (index in words.indices) { @@ -735,14 +735,25 @@ class TextChapterLayout( * 超出边界处理 */ private fun exceed(absStartX: Int, textLine: TextLine, words: List) { + var size = words.size + if (size < 2) return val visibleEnd = absStartX + visibleWidth - val endX = textLine.columns.lastOrNull()?.end?.roundToInt() ?: return + val columns = textLine.columns + var offset = 0 + val endColumn = if (words.last() == " ") { + size-- + offset++ + columns[columns.lastIndex - 1] + } else { + columns.last() + } + val endX = endColumn.end.roundToInt() if (endX > visibleEnd) { textLine.exceed = true - val cc = (endX - visibleEnd) / words.size - for (i in 0..words.lastIndex) { - textLine.getColumnReverseAt(i).let { - val py = cc * (words.size - i) + val cc = (endX - visibleEnd) / size + for (i in 0..