更新界面

This commit is contained in:
HapeLee
2025-06-11 22:36:33 +08:00
parent 60b9f922cc
commit f8a39f1a24
17 changed files with 795 additions and 233 deletions
@@ -141,6 +141,9 @@ abstract class BaseActivity<VB : ViewBinding>(
"1" -> setTheme(R.style.Theme_Base_GR)
"2" -> setTheme(R.style.Theme_Base_Lemon)
"3" -> setTheme(R.style.Theme_Base_WH)
"4" -> setTheme(R.style.Theme_Base_Koharu)
"5" -> setTheme(R.style.Theme_Base_Yuuka)
"6" -> setTheme(R.style.Theme_Base_Phoebe)
}
}
@@ -92,6 +92,9 @@ class ThemeCardPreference(context: Context, attrs: AttributeSet) : Preference(co
"1" to R.style.Theme_Base_GR,
"2" to R.style.Theme_Base_Lemon,
"3" to R.style.Theme_Base_WH,
"4" to R.style.Theme_Base_Koharu,
"5" to R.style.Theme_Base_Yuuka,
"6" to R.style.Theme_Base_Phoebe
)
private fun getThemeColors(value: String): List<Int> {
@@ -1,6 +1,7 @@
package io.legato.kazusa.ui.book.read.config
import android.content.DialogInterface
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
@@ -16,17 +17,17 @@ import io.legato.kazusa.databinding.ItemReadStyleBinding
import io.legato.kazusa.help.config.AppConfig
import io.legato.kazusa.help.config.ReadBookConfig
import io.legato.kazusa.lib.dialogs.selector
//import io.legado.app.lib.theme.accentColor
//import io.legado.app.lib.theme.bottomBackground
//import io.legado.app.lib.theme.getPrimaryTextColor
import io.legato.kazusa.model.ReadBook
import io.legato.kazusa.ui.book.read.ReadBookActivity
import io.legato.kazusa.ui.font.FontSelectDialog
import io.legato.kazusa.ui.widget.DetailSeekBar
import io.legato.kazusa.utils.ChineseUtils
import io.legato.kazusa.utils.postEvent
import io.legato.kazusa.utils.showDialogFragment
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
import splitties.views.onLongClick
import androidx.core.graphics.drawable.toDrawable
import androidx.transition.TransitionManager
class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_style),
FontSelectDialog.CallBack {
@@ -35,6 +36,9 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
private val callBack get() = activity as? ReadBookActivity
private lateinit var styleAdapter: StyleAdapter
private lateinit var allSliders: List<DetailSeekBar>
override fun onStart() {
super.onStart()
// dialog?.window?.run {
@@ -154,6 +158,23 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
upView()
postEvent(EventBus.UP_CONFIG, arrayListOf(1, 2, 5))
}
allSliders = listOf(
dsbTextSize,
dsbTextLetterSpacing,
dsbLineSize,
dsbParagraphSpacing
)
allSliders.forEach { seekBar ->
seekBar.onStartTracking = {
setOnlyActiveSeekBarVisible(seekBar, true)
}
seekBar.onStopTracking = {
setOnlyActiveSeekBarVisible(seekBar, false)
}
}
dsbTextSize.onChanged = {
ReadBookConfig.textSize = it + 5
postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
@@ -172,6 +193,27 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
}
}
private fun setOnlyActiveSeekBarVisible(activeSeekBar: DetailSeekBar, visible: Boolean) {
if (visible == true) {
TransitionManager.beginDelayedTransition(binding.setBar)
TransitionManager.beginDelayedTransition(binding.setBottomBar)
binding.setBar.visibility = View.GONE
binding.setBottomBar.visibility = View.GONE
}else{
TransitionManager.beginDelayedTransition(binding.setBar)
TransitionManager.beginDelayedTransition(binding.setBottomBar)
binding.setBar.visibility = View.VISIBLE
binding.setBottomBar.visibility = View.VISIBLE
}
allSliders.forEach { seekBar ->
if (seekBar != activeSeekBar) {
seekBar.visibility = if (visible) View.GONE else View.VISIBLE
}
}
}
private fun changeBgTextConfig(index: Int) {
val oldIndex = ReadBookConfig.styleSelect
if (index != oldIndex) {
@@ -24,7 +24,9 @@ class DetailSeekBar @JvmOverloads constructor(
private val isBottomBackground: Boolean
var valueFormat: ((progress: Int) -> String)? = null
var onStartTracking: (() -> Unit)? = null
var onChanged: ((progress: Int) -> Unit)? = null
var onStopTracking: (() -> Unit)? = null
var progress: Int
get() = binding.slider.value.toInt()
@@ -50,14 +52,6 @@ class DetailSeekBar @JvmOverloads constructor(
}
binding.slider.valueTo = typedArray.getInteger(R.styleable.DetailSeekBar_max, 0).toFloat()
typedArray.recycle()
if (isBottomBackground && !isInEditMode) {
// val isLight = ColorUtils.isColorLight(context.bottomBackground)
// val textColor = context.getPrimaryTextColor(isLight)
// binding.tvSeekTitle.setTextColor(textColor)
// binding.ivSeekPlus.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
// binding.ivSeekReduce.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
// binding.tvSeekValue.setTextColor(textColor)
}
binding.ivSeekPlus.setOnClickListener {
val newValue = (binding.slider.value + 1).coerceAtMost(binding.slider.valueTo)
binding.slider.value = newValue
@@ -72,14 +66,19 @@ class DetailSeekBar @JvmOverloads constructor(
binding.slider.addOnChangeListener { _, value, fromUser ->
upValue(value.toInt())
if (fromUser) {
onChanged?.invoke(value.toInt())
}
}
binding.slider.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {
// 可以添加开始拖动时的逻辑
onStartTracking?.invoke()
}
override fun onStopTrackingTouch(slider: Slider) {
onStopTracking?.invoke()
onChanged?.invoke(slider.value.toInt())
}
})
@@ -9,19 +9,20 @@ import io.legato.kazusa.lib.theme.Selector
import io.legato.kazusa.utils.ColorUtils
import io.legato.kazusa.utils.dpToPx
import androidx.core.content.withStyledAttributes
import io.legato.kazusa.utils.themeColor
class AccentBgTextView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null
) : MaterialTextView(context, attrs) {
private var radiusPx = 0
private var radiusPx = 32
init {
context.withStyledAttributes(attrs, R.styleable.AccentBgTextView) {
val radiusDp = getDimensionPixelOffset(R.styleable.AccentBgTextView_radius, 0)
radiusPx = radiusDp
}
// context.withStyledAttributes(attrs, R.styleable.AccentBgTextView) {
// val radiusDp = getDimensionPixelOffset(R.styleable.AccentBgTextView_radius, 0)
// radiusPx = radiusDp
// }
updateBackground()
}
@@ -31,16 +32,8 @@ class AccentBgTextView @JvmOverloads constructor(
}
private fun updateBackground() {
val backgroundColor = MaterialColors.getColor(
this,
com.google.android.material.R.attr.colorPrimaryContainer,
//context.getColorCompat(R.color.fallback_bg)
)
val textColor = MaterialColors.getColor(
this,
com.google.android.material.R.attr.colorOnPrimaryContainer,
//context.getColorCompat(R.color.fallback_text)
)
val backgroundColor = context.themeColor(com.google.android.material.R.attr.colorPrimaryContainer)
val textColor = context.themeColor(com.google.android.material.R.attr.colorOnPrimaryContainer)
background = Selector.shapeBuild()
.setCornerRadius(radiusPx)