漫画新增配置:点击翻页动画、加载渐变动画开关 #240、#254

This commit is contained in:
HapeLee
2025-11-09 02:47:16 +08:00
parent 8620040082
commit c9708d36a1
11 changed files with 82 additions and 15 deletions
@@ -211,5 +211,9 @@ object PreferKey {
const val systemMediaControlCompatibilityChange = "systemMediaControlCompatibilityChange" const val systemMediaControlCompatibilityChange = "systemMediaControlCompatibilityChange"
const val isPredictiveBackEnabled = "isPredictiveBackEnabled" const val isPredictiveBackEnabled = "isPredictiveBackEnabled"
const val replaceSortMode = "desc" const val replaceSortMode = "desc"
const val readBarStyle = "0" const val readBarStyle = "readBarStyle"
//我在干什么
const val disableMangaScrollAnimation = "disableMangaScrollAnimation"
const val disableMangaCrossFade = "disableMangaCrossFade"
} }
@@ -722,6 +722,18 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
appCtx.putPrefBoolean(PreferKey.disableMangaScale, value) appCtx.putPrefBoolean(PreferKey.disableMangaScale, value)
} }
var disableMangaScrollAnimation: Boolean
get() = appCtx.getPrefBoolean(PreferKey.disableMangaScrollAnimation, false)
set(value) {
appCtx.putPrefBoolean(PreferKey.disableMangaScrollAnimation, value)
}
var disableMangaCrossFade: Boolean
get() = appCtx.getPrefBoolean(PreferKey.disableMangaCrossFade, false)
set(value) {
appCtx.putPrefBoolean(PreferKey.disableMangaCrossFade, value)
}
//漫画预加载数量 //漫画预加载数量
var mangaPreDownloadNum var mangaPreDownloadNum
get() = appCtx.getPrefInt(PreferKey.mangaPreDownloadNum, 10) get() = appCtx.getPrefInt(PreferKey.mangaPreDownloadNum, 10)
@@ -147,19 +147,23 @@ object BookCover {
if (sourceOrigin != null) { if (sourceOrigin != null) {
options = options.set(OkHttpModelLoader.sourceOriginOption, sourceOrigin) options = options.set(OkHttpModelLoader.sourceOriginOption, sourceOrigin)
} }
return ImageLoader.load(context, path) var builder = ImageLoader.load(context, path)
.apply(options) .apply(options)
.override(context.resources.displayMetrics.widthPixels, SIZE_ORIGINAL) .override(context.resources.displayMetrics.widthPixels, SIZE_ORIGINAL)
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.skipMemoryCache(true).let { .skipMemoryCache(true)
if (transformation != null) { if (transformation != null) {
it.transform(transformation) builder = builder.transform(transformation)
}
builder = if (AppConfig.disableMangaCrossFade) {
builder
} else { } else {
it builder.transition(DrawableTransitionOptions.withCrossFade())
} }
return builder
} }
.transition(DrawableTransitionOptions.withCrossFade())
}
fun preloadManga( fun preloadManga(
context: Context, context: Context,
@@ -635,6 +635,14 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
AppConfig.disableClickScroll = disabled AppConfig.disableClickScroll = disabled
} }
override fun onScrollAniDisabledChanged(disabled: Boolean) {
AppConfig.disableMangaScrollAnimation = disabled
}
override fun onCrossFadeDisabledChanged(disabled: Boolean) {
AppConfig.disableMangaCrossFade = disabled
}
//双击缩放 //双击缩放
override fun onMangaScaleDisabledChanged(disabled: Boolean) { override fun onMangaScaleDisabledChanged(disabled: Boolean) {
AppConfig.disableMangaScale = disabled AppConfig.disableMangaScale = disabled
@@ -873,7 +881,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
} }
dx *= direction dx *= direction
dy *= direction dy *= direction
if (!AppConfig.disableMangaScrollAnimation)
binding.recyclerView.smoothScrollBy(dx, dy) binding.recyclerView.smoothScrollBy(dx, dy)
else
binding.recyclerView.scrollBy(dx, dy)
} }
private fun showNumberPickerDialog( private fun showNumberPickerDialog(
@@ -80,6 +80,20 @@ class MangaFooterSettingDialog :
} }
} }
binding.checkboxScrollAnimation.apply {
isChecked = AppConfig.disableMangaScrollAnimation
setOnCheckedChangeListener { _, isChecked ->
callback?.onScrollAniDisabledChanged(isChecked)
}
}
binding.checkboxMangaCrossFade.apply {
isChecked = AppConfig.disableMangaCrossFade
setOnCheckedChangeListener { _, isChecked ->
callback?.onCrossFadeDisabledChanged(isChecked)
}
}
binding.checkboxDisableMangaScale.apply { binding.checkboxDisableMangaScale.apply {
isChecked = AppConfig.disableMangaScale isChecked = AppConfig.disableMangaScale
setOnCheckedChangeListener { _, isChecked -> setOnCheckedChangeListener { _, isChecked ->
@@ -265,6 +279,8 @@ class MangaFooterSettingDialog :
fun onScrollModeChanged(mode: Int) fun onScrollModeChanged(mode: Int)
fun upSidePadding(padding: Int) fun upSidePadding(padding: Int)
fun onClickScrollDisabledChanged(disabled: Boolean) fun onClickScrollDisabledChanged(disabled: Boolean)
fun onScrollAniDisabledChanged(disabled: Boolean)
fun onCrossFadeDisabledChanged(disabled: Boolean)
fun onMangaScaleDisabledChanged(disabled: Boolean) fun onMangaScaleDisabledChanged(disabled: Boolean)
fun onHideMangaTitleChanged(hide: Boolean) fun onHideMangaTitleChanged(hide: Boolean)
fun onVolumeKeyPageChanged(enable: Boolean) fun onVolumeKeyPageChanged(enable: Boolean)
@@ -250,6 +250,12 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/disable_manga_scale" /> android:text="@string/disable_manga_scale" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/checkboxScrollAnimation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/disable_manga_scroll_animation" />
<com.google.android.material.checkbox.MaterialCheckBox <com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/checkboxHideMangaTitle" android:id="@+id/checkboxHideMangaTitle"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -267,6 +273,13 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/manga_long_click" /> android:text="@string/manga_long_click" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/checkboxMangaCrossFade"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/manga_cross_fade" />
</LinearLayout> </LinearLayout>
<com.google.android.material.button.MaterialButtonGroup <com.google.android.material.button.MaterialButtonGroup
@@ -30,6 +30,7 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:orientation="horizontal"> android:orientation="horizontal">
<TextView <TextView
@@ -41,7 +42,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
android:text="@string/read_config" android:text="@string/read_config"
android:textSize="18sp" android:textSize="16sp"
android:textStyle="bold" /> android:textStyle="bold" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
@@ -26,9 +26,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:indeterminate="false" android:indeterminate="false"
app:indicatorSize="80dp" app:indicatorSize="64dp"
android:layout_gravity="center" android:layout_gravity="center" />
app:showAnimationBehavior="outward" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
@@ -90,6 +90,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3Expressive.Button.IconButton.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
app:backgroundTint="?attr/colorSurfaceContainer"
app:icon="@drawable/ic_previous" app:icon="@drawable/ic_previous"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
@@ -113,6 +114,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3Expressive.Button.IconButton.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
app:backgroundTint="?attr/colorSurfaceContainer"
app:icon="@drawable/ic_next" app:icon="@drawable/ic_next"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
</LinearLayout> </LinearLayout>
+2
View File
@@ -1335,4 +1335,6 @@
<string name="text_typeface">字体样式</string> <string name="text_typeface">字体样式</string>
<string name="shadow_typeface">阴影样式</string> <string name="shadow_typeface">阴影样式</string>
<string name="long_click_to_custom">长按自定义</string> <string name="long_click_to_custom">长按自定义</string>
<string name="disable_manga_scroll_animation">禁用翻页动画</string>
<string name="manga_cross_fade">禁用加载淡入动画</string>
</resources> </resources>
+2
View File
@@ -1336,4 +1336,6 @@
<string name="text_typeface">字体样式</string> <string name="text_typeface">字体样式</string>
<string name="shadow_typeface">阴影样式</string> <string name="shadow_typeface">阴影样式</string>
<string name="long_click_to_custom">长按自定义</string> <string name="long_click_to_custom">长按自定义</string>
<string name="disable_manga_scroll_animation">禁用翻页动画</string>
<string name="manga_cross_fade">禁用加载淡入动画</string>
</resources> </resources>