优化
This commit is contained in:
@@ -2,4 +2,4 @@
|
|||||||
* 本应用网络同步和备份采用webDav协议,由用户自己提供同步服务.
|
* 本应用网络同步和备份采用webDav协议,由用户自己提供同步服务.
|
||||||
* 存储权限用来打开本地文件和本地备份恢复.
|
* 存储权限用来打开本地文件和本地备份恢复.
|
||||||
* 其它一些权限是Google Firebase需要.
|
* 其它一些权限是Google Firebase需要.
|
||||||
* 本应用为开源软件,使用中发生任何问题由用户自己承担.
|
* 本应用为开源软件,内置js引擎,因书源调用js发生的任何问题由用户自行承担.
|
||||||
@@ -156,7 +156,7 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
|
|||||||
private fun drawUnderline(canvas: Canvas, textLine: TextLine, relativeOffset: Float) {
|
private fun drawUnderline(canvas: Canvas, textLine: TextLine, relativeOffset: Float) {
|
||||||
val lineY = relativeOffset + textLine.lineBottom - 1.dpToPx()
|
val lineY = relativeOffset + textLine.lineBottom - 1.dpToPx()
|
||||||
canvas.drawLine(
|
canvas.drawLine(
|
||||||
textLine.lineStart,
|
textLine.lineStart + textLine.indentWidth,
|
||||||
lineY,
|
lineY,
|
||||||
textLine.lineEnd,
|
textLine.lineEnd,
|
||||||
lineY,
|
lineY,
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ data class TextLine(
|
|||||||
var lineTop: Float = 0f,
|
var lineTop: Float = 0f,
|
||||||
var lineBase: Float = 0f,
|
var lineBase: Float = 0f,
|
||||||
var lineBottom: Float = 0f,
|
var lineBottom: Float = 0f,
|
||||||
|
var indentWidth: Float = 0f,
|
||||||
val isTitle: Boolean = false,
|
val isTitle: Boolean = false,
|
||||||
var isParagraphEnd: Boolean = false,
|
var isParagraphEnd: Boolean = false,
|
||||||
var isReadAloud: Boolean = false,
|
var isReadAloud: Boolean = false,
|
||||||
|
|||||||
@@ -377,8 +377,8 @@ object ChapterProvider {
|
|||||||
0f
|
0f
|
||||||
}
|
}
|
||||||
addCharsToLineNatural(
|
addCharsToLineNatural(
|
||||||
book, absStartX, textLine, words.toStringArray(),
|
book, absStartX, textLine, words.toStringArray(), textPaint,
|
||||||
textPaint, startX, srcList
|
startX, !isTitle && lineIndex == 0, srcList
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
@@ -390,7 +390,7 @@ object ChapterProvider {
|
|||||||
val startX = (visibleWidth - layout.getLineWidth(lineIndex)) / 2
|
val startX = (visibleWidth - layout.getLineWidth(lineIndex)) / 2
|
||||||
addCharsToLineNatural(
|
addCharsToLineNatural(
|
||||||
book, absStartX, textLine, words.toStringArray(),
|
book, absStartX, textLine, words.toStringArray(),
|
||||||
textPaint, startX, srcList
|
textPaint, startX, false, srcList
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
//中间行
|
//中间行
|
||||||
@@ -430,7 +430,10 @@ object ChapterProvider {
|
|||||||
) {
|
) {
|
||||||
var x = 0f
|
var x = 0f
|
||||||
if (!ReadBookConfig.textFullJustify) {
|
if (!ReadBookConfig.textFullJustify) {
|
||||||
addCharsToLineNatural(book, absStartX, textLine, words, textPaint, x, srcList)
|
addCharsToLineNatural(
|
||||||
|
book, absStartX, textLine, words, textPaint,
|
||||||
|
x, true, srcList
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val bodyIndent = ReadBookConfig.paragraphIndent
|
val bodyIndent = ReadBookConfig.paragraphIndent
|
||||||
@@ -445,6 +448,7 @@ object ChapterProvider {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
x = x1
|
x = x1
|
||||||
|
textLine.indentWidth = x
|
||||||
}
|
}
|
||||||
if (words.size > bodyIndent.length) {
|
if (words.size > bodyIndent.length) {
|
||||||
val words1 = words.copyOfRange(bodyIndent.length, words.size)
|
val words1 = words.copyOfRange(bodyIndent.length, words.size)
|
||||||
@@ -471,7 +475,10 @@ object ChapterProvider {
|
|||||||
srcList: LinkedList<String>?
|
srcList: LinkedList<String>?
|
||||||
) {
|
) {
|
||||||
if (!ReadBookConfig.textFullJustify) {
|
if (!ReadBookConfig.textFullJustify) {
|
||||||
addCharsToLineNatural(book, absStartX, textLine, words, textPaint, startX, srcList)
|
addCharsToLineNatural(
|
||||||
|
book, absStartX, textLine, words, textPaint,
|
||||||
|
startX, false, srcList
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val residualWidth = visibleWidth - desiredWidth
|
val residualWidth = visibleWidth - desiredWidth
|
||||||
@@ -519,14 +526,19 @@ object ChapterProvider {
|
|||||||
words: Array<String>,
|
words: Array<String>,
|
||||||
textPaint: TextPaint,
|
textPaint: TextPaint,
|
||||||
startX: Float,
|
startX: Float,
|
||||||
|
hasIndent: Boolean,
|
||||||
srcList: LinkedList<String>?
|
srcList: LinkedList<String>?
|
||||||
) {
|
) {
|
||||||
|
val indentLength = ReadBookConfig.paragraphIndent.length
|
||||||
var x = startX
|
var x = startX
|
||||||
words.forEachIndexed { index, char ->
|
words.forEachIndexed { index, char ->
|
||||||
val cw = StaticLayout.getDesiredWidth(char, textPaint)
|
val cw = StaticLayout.getDesiredWidth(char, textPaint)
|
||||||
val x1 = x + cw
|
val x1 = 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
|
x = x1
|
||||||
|
if (hasIndent && index == indentLength - 1) {
|
||||||
|
textLine.indentWidth = x
|
||||||
|
}
|
||||||
}
|
}
|
||||||
exceed(absStartX, textLine, words)
|
exceed(absStartX, textLine, words)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user