This commit is contained in:
Horis
2024-02-19 11:13:57 +08:00
parent cf96150775
commit c77e6120ef
2 changed files with 25 additions and 14 deletions
@@ -137,9 +137,6 @@ object ChapterProvider {
@JvmStatic @JvmStatic
var visibleRect = RectF() var visibleRect = RectF()
private val titleMeasureHelper = TextMeasure(titlePaint)
private val contentMeasureHelper = TextMeasure(contentPaint)
init { init {
upStyle() upStyle()
} }
@@ -169,7 +166,6 @@ object ChapterProvider {
textPages, textPages,
stringBuilder, stringBuilder,
titlePaint, titlePaint,
titleMeasureHelper,
titlePaintTextHeight, titlePaintTextHeight,
titlePaintFontMetrics, titlePaintFontMetrics,
isTitle = true, isTitle = true,
@@ -207,7 +203,6 @@ object ChapterProvider {
textPages, textPages,
stringBuilder, stringBuilder,
contentPaint, contentPaint,
contentMeasureHelper,
contentPaintTextHeight, contentPaintTextHeight,
contentPaintFontMetrics, contentPaintFontMetrics,
srcList = srcList srcList = srcList
@@ -229,7 +224,6 @@ object ChapterProvider {
textPages, textPages,
stringBuilder, stringBuilder,
contentPaint, contentPaint,
contentMeasureHelper,
contentPaintTextHeight, contentPaintTextHeight,
contentPaintFontMetrics contentPaintFontMetrics
).let { ).let {
@@ -261,7 +255,6 @@ object ChapterProvider {
textPages, textPages,
stringBuilder, stringBuilder,
contentPaint, contentPaint,
contentMeasureHelper,
contentPaintTextHeight, contentPaintTextHeight,
contentPaintFontMetrics contentPaintFontMetrics
).let { ).let {
@@ -403,7 +396,6 @@ object ChapterProvider {
textPages: ArrayList<TextPage>, textPages: ArrayList<TextPage>,
stringBuilder: StringBuilder, stringBuilder: StringBuilder,
textPaint: TextPaint, textPaint: TextPaint,
measureHelper: TextMeasure,
textHeight: Float, textHeight: Float,
fontMetrics: FontMetrics, fontMetrics: FontMetrics,
isTitle: Boolean = false, isTitle: Boolean = false,
@@ -413,7 +405,7 @@ object ChapterProvider {
): Pair<Int, Float> { ): Pair<Int, Float> {
var absStartX = x var absStartX = x
val layout = if (ReadBookConfig.useZhLayout) { val layout = if (ReadBookConfig.useZhLayout) {
ZhLayout(text, textPaint, visibleWidth, measureHelper) ZhLayout(text, textPaint, visibleWidth)
} else { } else {
StaticLayout(text, textPaint, visibleWidth, Layout.Alignment.ALIGN_NORMAL, 0f, 0f, true) StaticLayout(text, textPaint, visibleWidth, Layout.Alignment.ALIGN_NORMAL, 0f, 0f, true)
} }
@@ -471,7 +463,7 @@ object ChapterProvider {
val lineStart = layout.getLineStart(lineIndex) val lineStart = layout.getLineStart(lineIndex)
val lineEnd = layout.getLineEnd(lineIndex) val lineEnd = layout.getLineEnd(lineIndex)
val lineText = text.substring(lineStart, lineEnd) val lineText = text.substring(lineStart, lineEnd)
val (words, widths) = measureHelper.measureTextSplit(lineText) val (words, widths) = measureTextSplit(lineText, textPaint)
val desiredWidth = widths.fastSum() val desiredWidth = widths.fastSum()
when { when {
lineIndex == 0 && layout.lineCount > 1 && !isTitle -> { lineIndex == 0 && layout.lineCount > 1 && !isTitle -> {
@@ -751,6 +743,28 @@ object ChapterProvider {
} }
} }
fun measureTextSplit(
text: String,
paint: TextPaint
): Pair<ArrayList<String>, ArrayList<Float>> {
val length = text.length
val widthsArray = FloatArray(length)
paint.getTextWidths(text, widthsArray)
val clusterCount = widthsArray.count { it > 0f }
val widths = ArrayList<Float>(clusterCount)
val stringList = ArrayList<String>(clusterCount)
var i = 0
while (i < length) {
val clusterBaseIndex = i++
widths.add(widthsArray[clusterBaseIndex])
while (i < length && widthsArray[i] == 0f) {
i++
}
stringList.add(text.substring(clusterBaseIndex, i))
}
return stringList to widths
}
/** /**
* 更新样式 * 更新样式
*/ */
@@ -759,8 +773,6 @@ object ChapterProvider {
getPaints(typeface).let { getPaints(typeface).let {
titlePaint = it.first titlePaint = it.first
contentPaint = it.second contentPaint = it.second
titleMeasureHelper.setPaint(titlePaint)
contentMeasureHelper.setPaint(contentPaint)
// reviewPaint.color = contentPaint.color // reviewPaint.color = contentPaint.color
// reviewPaint.textSize = contentPaint.textSize * 0.45f // reviewPaint.textSize = contentPaint.textSize * 0.45f
// reviewPaint.textAlign = Paint.Align.CENTER // reviewPaint.textAlign = Paint.Align.CENTER
@@ -16,7 +16,6 @@ class ZhLayout(
text: CharSequence, text: CharSequence,
textPaint: TextPaint, textPaint: TextPaint,
width: Int, width: Int,
measureHelper: TextMeasure,
) : Layout(text, textPaint, width, Alignment.ALIGN_NORMAL, 0f, 0f) { ) : Layout(text, textPaint, width, Alignment.ALIGN_NORMAL, 0f, 0f) {
companion object { companion object {
private val postPanc = hashSetOf( private val postPanc = hashSetOf(
@@ -50,7 +49,7 @@ class ZhLayout(
init { init {
var line = 0 var line = 0
val (words, widths) = measureHelper.measureTextSplit(text as String) val (words, widths) = ChapterProvider.measureTextSplit(text as String, textPaint)
var lineW = 0f var lineW = 0f
var cwPre = 0f var cwPre = 0f
var length = 0 var length = 0