下滑虚线
This commit is contained in:
@@ -388,6 +388,18 @@ object ReadBookConfig {
|
|||||||
config.dottedLine = value
|
config.dottedLine = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var dottedBase: Float
|
||||||
|
get() = config.dottedBase
|
||||||
|
set(value) {
|
||||||
|
config.dottedBase = value
|
||||||
|
}
|
||||||
|
|
||||||
|
var dottedRatio: Float
|
||||||
|
get() = config.dottedRatio
|
||||||
|
set(value) {
|
||||||
|
config.dottedRatio = value
|
||||||
|
}
|
||||||
|
|
||||||
var paddingBottom: Int
|
var paddingBottom: Int
|
||||||
get() = config.paddingBottom
|
get() = config.paddingBottom
|
||||||
set(value) {
|
set(value) {
|
||||||
@@ -607,6 +619,8 @@ object ReadBookConfig {
|
|||||||
var paragraphIndent: String = " ",//段落缩进
|
var paragraphIndent: String = " ",//段落缩进
|
||||||
var underline: Boolean = false, //下划线
|
var underline: Boolean = false, //下划线
|
||||||
var dottedLine: Boolean = false, //虚线
|
var dottedLine: Boolean = false, //虚线
|
||||||
|
var dottedBase: Float = 6f, //长度
|
||||||
|
var dottedRatio: Float = 6f,
|
||||||
var paddingBottom: Int = 6,
|
var paddingBottom: Int = 6,
|
||||||
var paddingLeft: Int = 16,
|
var paddingLeft: Int = 16,
|
||||||
var paddingRight: Int = 16,
|
var paddingRight: Int = 16,
|
||||||
|
|||||||
@@ -134,6 +134,12 @@ class BgTextConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_bg
|
|||||||
binding.swDottedline.isChecked = dottedLine
|
binding.swDottedline.isChecked = dottedLine
|
||||||
binding.swDottedline.isEnabled = underline
|
binding.swDottedline.isEnabled = underline
|
||||||
binding.sbBgAlpha.value = ReadBookConfig.bgAlpha.toFloat()
|
binding.sbBgAlpha.value = ReadBookConfig.bgAlpha.toFloat()
|
||||||
|
binding.dottedRatio.valueFormat = {
|
||||||
|
(ReadBookConfig.dottedRatio * 100).toInt().toString()
|
||||||
|
}
|
||||||
|
binding.dottedBase.valueFormat = {
|
||||||
|
(ReadBookConfig.dottedBase * 100).toInt().toString()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("InflateParams")
|
@SuppressLint("InflateParams")
|
||||||
@@ -239,6 +245,14 @@ class BgTextConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_bg
|
|||||||
postEvent(EventBus.UP_CONFIG, arrayListOf(3))
|
postEvent(EventBus.UP_CONFIG, arrayListOf(3))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
binding.dottedRatio.onChanged = {
|
||||||
|
ReadBookConfig.dottedRatio = it / 100f
|
||||||
|
postEvent(EventBus.UP_CONFIG, arrayListOf(6, 9, 11))
|
||||||
|
}
|
||||||
|
binding.dottedBase.onChanged = {
|
||||||
|
ReadBookConfig.dottedBase = it / 100f
|
||||||
|
postEvent(EventBus.UP_CONFIG, arrayListOf(6, 9, 11))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun exportConfig(uri: Uri) {
|
private fun exportConfig(uri: Uri) {
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package io.legado.app.ui.book.read.page.entities
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.graphics.DashPathEffect
|
|
||||||
import android.graphics.Paint.FontMetrics
|
import android.graphics.Paint.FontMetrics
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import androidx.annotation.Keep
|
import androidx.annotation.Keep
|
||||||
@@ -157,19 +156,15 @@ data class TextLine(
|
|||||||
if (checkFastDraw()) {
|
if (checkFastDraw()) {
|
||||||
fastDrawTextLine(view, canvas)
|
fastDrawTextLine(view, canvas)
|
||||||
} else {
|
} else {
|
||||||
for (i in columns.indices) {
|
for (i in columns.indices) columns[i].draw(view, canvas)
|
||||||
columns[i].draw(view, canvas)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 墨水屏模式下的朗读和搜索下划线
|
|
||||||
if (AppConfig.isEInkMode && (isReadAloud || searchResultColumnCount > 0)) {
|
if (AppConfig.isEInkMode && (isReadAloud || searchResultColumnCount > 0)) {
|
||||||
val underlinePaint = PaintPool.obtain()
|
val linePaint = ChapterProvider.linePaint
|
||||||
underlinePaint.set(ChapterProvider.contentPaint)
|
|
||||||
underlinePaint.strokeWidth = 1.dpToPx().toFloat()
|
|
||||||
val lineY = height - 1.dpToPx()
|
val lineY = height - 1.dpToPx()
|
||||||
canvas.drawLine(lineStart + indentWidth, lineY, lineEnd, lineY, underlinePaint)
|
canvas.drawLine(lineStart + indentWidth, lineY, lineEnd, lineY, linePaint)
|
||||||
PaintPool.recycle(underlinePaint)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ReadBookConfig.underline && !isImage && ReadBook.book?.isImage != true) {
|
if (ReadBookConfig.underline && !isImage && ReadBook.book?.isImage != true) {
|
||||||
drawUnderline(canvas, ReadBookConfig.dottedLine)
|
drawUnderline(canvas, ReadBookConfig.dottedLine)
|
||||||
}
|
}
|
||||||
@@ -215,20 +210,14 @@ data class TextLine(
|
|||||||
* 绘制下划线
|
* 绘制下划线
|
||||||
*/
|
*/
|
||||||
private fun drawUnderline(canvas: Canvas, dottedLine: Boolean) {
|
private fun drawUnderline(canvas: Canvas, dottedLine: Boolean) {
|
||||||
|
val paint = ChapterProvider.linePaint
|
||||||
|
paint.pathEffect =
|
||||||
|
if (dottedLine && !AppConfig.isEInkMode)
|
||||||
|
ChapterProvider.dashEffect
|
||||||
|
else
|
||||||
|
null
|
||||||
val lineY = height - 1.dpToPx()
|
val lineY = height - 1.dpToPx()
|
||||||
val paint = ChapterProvider.contentPaint
|
canvas.drawLine(lineStart + indentWidth, lineY, lineEnd, lineY, paint)
|
||||||
val oldEffect = paint.pathEffect
|
|
||||||
if (dottedLine) {
|
|
||||||
paint.pathEffect = DashPathEffect(floatArrayOf(6f, 6f), 0f)
|
|
||||||
}
|
|
||||||
canvas.drawLine(
|
|
||||||
lineStart + indentWidth,
|
|
||||||
lineY,
|
|
||||||
lineEnd,
|
|
||||||
lineY,
|
|
||||||
paint
|
|
||||||
)
|
|
||||||
paint.pathEffect = oldEffect
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package io.legado.app.ui.book.read.page.provider
|
package io.legado.app.ui.book.read.page.provider
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
import android.graphics.DashPathEffect
|
||||||
|
import android.graphics.Paint
|
||||||
import android.graphics.Paint.FontMetrics
|
import android.graphics.Paint.FontMetrics
|
||||||
import android.graphics.RectF
|
import android.graphics.RectF
|
||||||
import android.graphics.Typeface
|
import android.graphics.Typeface
|
||||||
@@ -17,6 +19,8 @@ import io.legado.app.data.entities.BookChapter
|
|||||||
import io.legado.app.help.book.BookContent
|
import io.legado.app.help.book.BookContent
|
||||||
import io.legado.app.help.config.AppConfig
|
import io.legado.app.help.config.AppConfig
|
||||||
import io.legado.app.help.config.ReadBookConfig
|
import io.legado.app.help.config.ReadBookConfig
|
||||||
|
import io.legado.app.help.config.ReadBookConfig.dottedBase
|
||||||
|
import io.legado.app.help.config.ReadBookConfig.dottedRatio
|
||||||
import io.legado.app.model.ImageProvider
|
import io.legado.app.model.ImageProvider
|
||||||
import io.legado.app.model.ReadBook
|
import io.legado.app.model.ReadBook
|
||||||
import io.legado.app.ui.book.read.page.entities.TextChapter
|
import io.legado.app.ui.book.read.page.entities.TextChapter
|
||||||
@@ -53,6 +57,17 @@ object ChapterProvider {
|
|||||||
|
|
||||||
const val indentChar = " "
|
const val indentChar = " "
|
||||||
|
|
||||||
|
val linePaint: Paint by lazy {
|
||||||
|
Paint(contentPaint).apply {
|
||||||
|
clearShadowLayer()
|
||||||
|
isAntiAlias = true
|
||||||
|
strokeWidth = 1.dpToPx().toFloat()
|
||||||
|
style = Paint.Style.STROKE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val dashEffect = DashPathEffect(floatArrayOf(dottedBase, dottedRatio), 0f)
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
var viewWidth = 0
|
var viewWidth = 0
|
||||||
private set
|
private set
|
||||||
|
|||||||
@@ -143,6 +143,33 @@
|
|||||||
android:text="@string/text_dottedline"
|
android:text="@string/text_dottedline"
|
||||||
tools:ignore="TouchTargetSizeCheck" />
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<io.legado.app.ui.widget.SimpleCounterView
|
||||||
|
android:id="@+id/dottedBase"
|
||||||
|
android:layout_width="120dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="实线长度"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<io.legado.app.ui.widget.SimpleCounterView
|
||||||
|
android:id="@+id/dottedRatio"
|
||||||
|
android:layout_width="120dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="比例"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButtonGroup
|
<com.google.android.material.button.MaterialButtonGroup
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
VERSION_MAJOR=3
|
VERSION_MAJOR=3
|
||||||
VERSION_MINOR=26
|
VERSION_MINOR=26
|
||||||
VERSION_PATCH=2
|
VERSION_PATCH=2
|
||||||
VERSION_SUFFIX=-beta.5
|
VERSION_SUFFIX=-beta.6
|
||||||
Reference in New Issue
Block a user