优化
This commit is contained in:
@@ -218,7 +218,9 @@ object ReadBookConfig {
|
||||
config.paragraphSpacing = value
|
||||
}
|
||||
|
||||
//标题位置 0:居左 1:居中 2:隐藏
|
||||
/**
|
||||
* 标题位置 0:居左 1:居中 2:隐藏
|
||||
*/
|
||||
var titleMode: Int
|
||||
get() = config.titleMode
|
||||
set(value) {
|
||||
@@ -230,6 +232,11 @@ object ReadBookConfig {
|
||||
config.titleSize = value
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否标题居中
|
||||
*/
|
||||
val isMiddleTitle get() = titleMode == 1
|
||||
|
||||
var titleTopSpacing: Int
|
||||
get() = config.titleTopSpacing
|
||||
set(value) {
|
||||
|
||||
@@ -136,7 +136,7 @@ object ChapterProvider {
|
||||
stringBuilder,
|
||||
titlePaint,
|
||||
isTitle = true,
|
||||
isTitleWithNoContent = contents.isEmpty(),
|
||||
emptyContent = contents.isEmpty(),
|
||||
isVolumeTitle = bookChapter.isVolume
|
||||
).let {
|
||||
absStartX = it.first
|
||||
@@ -295,7 +295,7 @@ object ChapterProvider {
|
||||
stringBuilder: StringBuilder,
|
||||
textPaint: TextPaint,
|
||||
isTitle: Boolean = false,
|
||||
isTitleWithNoContent: Boolean = false,
|
||||
emptyContent: Boolean = false,
|
||||
isVolumeTitle: Boolean = false,
|
||||
srcList: LinkedList<String>? = null
|
||||
): Pair<Int, Float> {
|
||||
@@ -307,7 +307,7 @@ object ChapterProvider {
|
||||
}
|
||||
var durY = when {
|
||||
//标题y轴居中
|
||||
isTitleWithNoContent && textPages.size == 1 -> {
|
||||
emptyContent && textPages.size == 1 -> {
|
||||
val textPage = textPages.last()
|
||||
if (textPage.lineSize == 0) {
|
||||
val ty = (visibleHeight - layout.lineCount * textPaint.textHeight) / 2
|
||||
@@ -368,9 +368,9 @@ object ChapterProvider {
|
||||
textLine.text = words
|
||||
textLine.isParagraphEnd = true
|
||||
//标题x轴居中
|
||||
val startX = if (isTitle && ReadBookConfig.titleMode == 1
|
||||
|| isTitleWithNoContent
|
||||
|| isVolumeTitle
|
||||
val startX = if (
|
||||
isTitle &&
|
||||
(ReadBookConfig.isMiddleTitle || emptyContent || isVolumeTitle)
|
||||
) {
|
||||
(visibleWidth - layout.getLineWidth(lineIndex)) / 2
|
||||
} else {
|
||||
@@ -382,12 +382,24 @@ object ChapterProvider {
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
//中间行
|
||||
textLine.text = words
|
||||
addCharsToLineMiddle(
|
||||
book, absStartX, textLine, words.toStringArray(),
|
||||
textPaint, desiredWidth, 0f, srcList
|
||||
)
|
||||
if (
|
||||
isTitle &&
|
||||
(ReadBookConfig.isMiddleTitle || emptyContent || isVolumeTitle)
|
||||
) {
|
||||
//标题居中
|
||||
val startX = (visibleWidth - layout.getLineWidth(lineIndex)) / 2
|
||||
addCharsToLineNatural(
|
||||
book, absStartX, textLine, words.toStringArray(),
|
||||
textPaint, startX, srcList
|
||||
)
|
||||
} else {
|
||||
//中间行
|
||||
textLine.text = words
|
||||
addCharsToLineMiddle(
|
||||
book, absStartX, textLine, words.toStringArray(),
|
||||
textPaint, desiredWidth, 0f, srcList
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
stringBuilder.append(words)
|
||||
@@ -412,6 +424,7 @@ object ChapterProvider {
|
||||
textLine: TextLine,
|
||||
words: Array<String>,
|
||||
textPaint: TextPaint,
|
||||
/**自然排版长度**/
|
||||
desiredWidth: Float,
|
||||
srcList: LinkedList<String>?
|
||||
) {
|
||||
@@ -436,7 +449,8 @@ object ChapterProvider {
|
||||
if (words.size > bodyIndent.length) {
|
||||
val words1 = words.copyOfRange(bodyIndent.length, words.size)
|
||||
addCharsToLineMiddle(
|
||||
book, absStartX, textLine, words1, textPaint, desiredWidth, x, srcList
|
||||
book, absStartX, textLine, words1,
|
||||
textPaint, desiredWidth, x, srcList
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -450,7 +464,9 @@ object ChapterProvider {
|
||||
textLine: TextLine,
|
||||
words: Array<String>,
|
||||
textPaint: TextPaint,
|
||||
/**自然排版长度**/
|
||||
desiredWidth: Float,
|
||||
/**起始x坐标**/
|
||||
startX: Float,
|
||||
srcList: LinkedList<String>?
|
||||
) {
|
||||
@@ -458,9 +474,10 @@ object ChapterProvider {
|
||||
addCharsToLineNatural(book, absStartX, textLine, words, textPaint, startX, srcList)
|
||||
return
|
||||
}
|
||||
val residualWidth = visibleWidth - desiredWidth
|
||||
val spaceSize = words.filter { it == " " }.size
|
||||
if (spaceSize > 0) {
|
||||
val d = (visibleWidth - desiredWidth) / spaceSize
|
||||
val d = residualWidth / spaceSize
|
||||
var x = startX
|
||||
words.forEachIndexed { index, char ->
|
||||
val cw = StaticLayout.getDesiredWidth(char, textPaint)
|
||||
@@ -469,17 +486,23 @@ object ChapterProvider {
|
||||
} else {
|
||||
(x + cw)
|
||||
}
|
||||
addCharToLine(book, absStartX, textLine, char, x, x1, index + 1 == words.size, srcList)
|
||||
addCharToLine(
|
||||
book, absStartX, textLine, char,
|
||||
x, x1, index + 1 == words.size, srcList
|
||||
)
|
||||
x = x1
|
||||
}
|
||||
} else {
|
||||
val gapCount: Int = words.lastIndex
|
||||
val d = (visibleWidth - desiredWidth) / gapCount
|
||||
val d = residualWidth / gapCount
|
||||
var x = startX
|
||||
words.forEachIndexed { index, char ->
|
||||
val cw = StaticLayout.getDesiredWidth(char, textPaint)
|
||||
val x1 = if (index != words.lastIndex) (x + cw + d) else (x + cw)
|
||||
addCharToLine(book, absStartX, textLine, char, x, x1, index + 1 == words.size, srcList)
|
||||
addCharToLine(
|
||||
book, absStartX, textLine, char,
|
||||
x, x1, index + 1 == words.size, srcList
|
||||
)
|
||||
x = x1
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user