增加震动

This commit is contained in:
HapeLee
2025-07-25 18:03:48 +08:00
parent 781615c777
commit c2353c9e71
5 changed files with 68 additions and 1 deletions
@@ -19,6 +19,7 @@ import io.legato.kazusa.model.ReadBook
import io.legato.kazusa.model.ReadManga
import io.legato.kazusa.ui.browser.WebViewActivity
import io.legato.kazusa.utils.ConstraintModify
import io.legato.kazusa.utils.VibrationUtils
import io.legato.kazusa.utils.activity
import io.legato.kazusa.utils.applyNavigationBarPadding
import io.legato.kazusa.utils.gone
@@ -220,12 +221,14 @@ class MangaMenu @JvmOverloads constructor(
seekReadPage.addOnChangeListener { slider, value, fromUser ->
if (fromUser) {
VibrationUtils.vibrate(context, 12)
callBack.skipToPage(value.toInt() - 1)
}
}
seekReadPage.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {
VibrationUtils.vibrate(context, 16)
vwMenuBg.setOnClickListener(null)
}
@@ -26,6 +26,7 @@ import io.legato.kazusa.model.ReadBook
import io.legato.kazusa.ui.browser.WebViewActivity
import io.legato.kazusa.ui.widget.seekbar.SeekBarChangeListener
import io.legato.kazusa.utils.ConstraintModify
import io.legato.kazusa.utils.VibrationUtils
import io.legato.kazusa.utils.activity
import io.legato.kazusa.utils.applyNavigationBarPadding
import io.legato.kazusa.utils.dpToPx
@@ -415,10 +416,19 @@ class ReadMenu @JvmOverloads constructor(
AppConfig.brightnessVwPos = !AppConfig.brightnessVwPos
upBrightnessVwPos()
}
seekReadPage.addOnChangeListener { slider, value, fromUser ->
if (fromUser) {
VibrationUtils.vibrate(context, 12)
if (AppConfig.progressBarBehavior == "page") ReadBook.skipToPage(slider.value.toInt() - 1)
ReadBook.skipToPage(slider.value.toInt() - 1)
}
}
//阅读进度
seekReadPage.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {
vwMenuBg.setOnClickListener(null)
VibrationUtils.vibrate(context, 16)
}
override fun onStopTrackingTouch(slider: Slider) {
@@ -90,6 +90,11 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
getNavigationBarView().getOrCreateBadge(R.id.menu_bookshelf)
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
recreate()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -0,0 +1,50 @@
package io.legato.kazusa.utils
import android.content.Context
import android.os.Build
import android.os.VibrationEffect
import android.os.Vibrator
import android.os.VibratorManager
object VibrationUtils {
/**
* 触发单次震动
* @param context 上下文
* @param milliseconds 震动时长(毫秒)
*/
fun vibrate(context: Context, milliseconds: Long) {
val vibrator = getVibrator(context)
vibrator.vibrate(
VibrationEffect.createOneShot(
milliseconds,
VibrationEffect.DEFAULT_AMPLITUDE
)
)
}
/**
* 触发带模式的震动
* @param context 上下文
* @param pattern 震动模式数组(如 longArrayOf(0, 200, 100, 300)
* @param repeat 重复次数(-1 为不重复)
*/
fun vibratePattern(context: Context, pattern: LongArray, repeat: Int = -1) {
val vibrator = getVibrator(context)
vibrator.vibrate(VibrationEffect.createWaveform(pattern, repeat))
}
/**
* 获取 Vibrator 实例(兼容 Android 12+
*/
private fun getVibrator(context: Context): Vibrator {
return if (Build.VERSION.SDK_INT >= 31) {
val vibratorManager =
context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
vibratorManager.defaultVibrator
} else {
@Suppress("DEPRECATION")
context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
}
}
}