Horis 2 lat temu
rodzic
commit
c77e6120ef

+ 24 - 12
app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt

@@ -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

+ 1 - 2
app/src/main/java/io/legado/app/ui/book/read/page/provider/ZhLayout.kt

@@ -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