From 3e123ab73c8d81967c736d3e0143ecdd0e61605c Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Sat, 6 Sep 2025 14:45:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AF=A6=E6=83=85=E9=A1=B5?= =?UTF-8?q?=E4=B9=A6=E7=B1=8D=E7=AE=80=E4=BB=8B=E4=B8=8B=E9=83=A8=E5=88=86?= =?UTF-8?q?=E8=A2=AB=E8=A3=81=E5=89=AA=EF=BC=8C=E6=9B=B4=E6=96=B0=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kazusa/ui/book/info/BookInfoActivity.kt | 112 +++++++++++++----- .../io/legato/kazusa/ui/widget/LabelsBar.kt | 2 +- .../main/res/layout/activity_book_info.xml | 100 +++++++--------- 3 files changed, 131 insertions(+), 83 deletions(-) diff --git a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt index 98ad20649..298d2ad79 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt @@ -160,9 +160,12 @@ class BookInfoActivity : } private var surfaceFinalColor: Int = 0 + private var surfaceContainerFinalColor: Int = 0 private var secondaryFinalColor: Int = 0 private var onSurfaceFinalColor: Int = 0 private var secondaryContainerFinalColor: Int = 0 + private var primaryFinalColor: Int = 0 + private var tertiaryFinalColor: Int = 0 private var currentJob: Job? = null private var wrappedContext: Context? = null private var chapterChanged = false @@ -190,17 +193,38 @@ class BookInfoActivity : MaterialColors.getColor(this, com.google.android.material.R.attr.colorSecondary, -1) onSurfaceFinalColor = MaterialColors.getColor(this, com.google.android.material.R.attr.colorOnSurface, -1) + surfaceContainerFinalColor = MaterialColors.getColor( + this, + com.google.android.material.R.attr.colorSurfaceContainer, + -1 + ) secondaryContainerFinalColor = MaterialColors.getColor( this, com.google.android.material.R.attr.colorSecondaryContainer, -1 ) + primaryFinalColor = MaterialColors.getColor( + this, + androidx.appcompat.R.attr.colorPrimary, + -1 + ) + tertiaryFinalColor = MaterialColors.getColor( + this, + com.google.android.material.R.attr.colorTertiary, + -1 + ) binding.cdCov.transitionName = intent.getStringExtra("transitionName") binding.cdCov.doOnPreDraw { startPostponedEnterTransition() } setSupportActionBar(binding.topBar) - binding.llRead?.applyNavigationBarMargin() + + binding.scrollView.setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> + if (scrollY > oldScrollY) binding.btnRead.shrink() + else if (scrollY < oldScrollY) binding.btnRead.extend() + } + + binding.btnRead.applyNavigationBarMargin() binding.btnShelf.text = getString(R.string.remove_from_bookshelf) binding.tvToc.text = getString(R.string.toc_s, getString(R.string.loading)) @@ -480,7 +504,8 @@ class BookInfoActivity : private suspend fun applyColorScheme() { val ctx = wrappedContext ?: this - val colorPrimary = MaterialColors.getColor(ctx, androidx.appcompat.R.attr.colorPrimary, -1) + val colorPrimary = + MaterialColors.getColor(ctx, androidx.appcompat.R.attr.colorPrimary, -1) val colorSecondary = MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorSecondary, -1) val colorTertiary = @@ -489,16 +514,18 @@ class BookInfoActivity : MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorOnSurface, -1) val colorSurface = MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorSurface, -1) - val colorSurfaceContainer = MaterialColors.getColor( - ctx, - com.google.android.material.R.attr.colorSurfaceContainer, - -1 - ) - val colorSecondaryContainer = MaterialColors.getColor( - ctx, - com.google.android.material.R.attr.colorSecondaryContainer, - -1 - ) + val colorSurfaceContainer = + MaterialColors.getColor( + ctx, + com.google.android.material.R.attr.colorSurfaceContainerHighest, + -1 + ) + val colorSecondaryContainer = + MaterialColors.getColor( + ctx, + com.google.android.material.R.attr.colorSecondaryContainer, + -1 + ) val surfaceTransition = ValueAnimator.ofArgb(surfaceFinalColor, colorSurface).apply { duration = 400L @@ -506,9 +533,21 @@ class BookInfoActivity : val color = animation.animatedValue as Int binding.cdInfo?.setCardBackgroundColor(color) binding.llInfo.setBackgroundColor(color) + (binding.llCover.background as? GradientDrawable)?.colors = + intArrayOf(Color.TRANSPARENT, color) } } + val surfaceContainerTransition = + ValueAnimator.ofArgb(surfaceContainerFinalColor, colorSurfaceContainer).apply { + duration = 400L + addUpdateListener { animation -> + val color = animation.animatedValue as Int + binding.lbKind.applyColorScheme(color, colorOnSurface) + binding.collTopBar.setContentScrimColor(color) + } + } + val buttonTransition = ValueAnimator.ofArgb(secondaryFinalColor, colorSecondary).apply { duration = 400L addUpdateListener { animation -> @@ -523,6 +562,8 @@ class BookInfoActivity : btn.setTextColor(color) btn.iconTint = tint } + binding.div.setTextColor(color) + binding.tvChapterIndex.setTextColor(color) } } @@ -543,33 +584,48 @@ class BookInfoActivity : binding.tvAuthor.setTextColor(color) binding.tvOrigin.setTextColor(color) binding.tvDetail.setTextColor(color) + binding.tvToc.setTextColor(color) + binding.tvLasted.setTextColor(color) binding.ivName.imageTintList = ColorStateList.valueOf(color) binding.ivWeb.imageTintList = ColorStateList.valueOf(color) } } + val primaryTransition = ValueAnimator.ofArgb(primaryFinalColor, colorPrimary).apply { + duration = 400L + addUpdateListener { animation -> + val color = animation.animatedValue as Int + binding.tvChapter.setTextColor(color) + } + } + + val tertiaryTransition = ValueAnimator.ofArgb(tertiaryFinalColor, colorTertiary).apply { + duration = 400L + addUpdateListener { animation -> + val color = animation.animatedValue as Int + binding.btnRead.setBackgroundColor(color) + } + } + withContext(Dispatchers.Main) { - surfaceTransition.start() - buttonTransition.start() - textTransition.start() - backTransition.start() + listOf( + surfaceTransition, + surfaceContainerTransition, + buttonTransition, + backTransition, + textTransition, + primaryTransition, + tertiaryTransition + ).forEach { it.start() } } surfaceFinalColor = colorSurface secondaryFinalColor = colorSecondary onSurfaceFinalColor = colorOnSurface - - (binding.llCover.background as? GradientDrawable)?.colors = - intArrayOf(Color.TRANSPARENT, colorSurface) - - binding.collTopBar.setContentScrimColor(colorSurfaceContainer) - binding.lbKind.applyColorScheme(colorSurfaceContainer, colorOnSurface) - binding.tvChapter.setTextColor(colorPrimary) - binding.div.setTextColor(colorSecondary) - binding.tvChapterIndex.setTextColor(colorSecondary) - binding.btnRead.setBackgroundColor(colorTertiary) - binding.tvToc.setTextColor(colorOnSurface) - binding.tvLasted.setTextColor(colorOnSurface) + surfaceContainerFinalColor = colorSurfaceContainer + primaryFinalColor = colorPrimary + tertiaryFinalColor = colorTertiary + secondaryContainerFinalColor = colorSecondaryContainer } private fun upLoading(isLoading: Boolean, chapterList: List? = null) { diff --git a/app/src/main/java/io/legato/kazusa/ui/widget/LabelsBar.kt b/app/src/main/java/io/legato/kazusa/ui/widget/LabelsBar.kt index bdd8df3e2..954caeb52 100644 --- a/app/src/main/java/io/legato/kazusa/ui/widget/LabelsBar.kt +++ b/app/src/main/java/io/legato/kazusa/ui/widget/LabelsBar.kt @@ -38,7 +38,7 @@ class LabelsBar @JvmOverloads constructor( chipEndPadding = 8f chipStrokeWidth = 0f chipBackgroundColor = ColorStateList.valueOf( - context.themeColor(com.google.android.material.R.attr.colorPrimaryContainer) + context.themeColor(com.google.android.material.R.attr.colorSurfaceContainerHighest) ) usedChips.add(this) } diff --git a/app/src/main/res/layout/activity_book_info.xml b/app/src/main/res/layout/activity_book_info.xml index bae9b20c0..2ce966ba3 100644 --- a/app/src/main/res/layout/activity_book_info.xml +++ b/app/src/main/res/layout/activity_book_info.xml @@ -50,23 +50,21 @@ - - - - - + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@id/cd_cov"> + + + + + app:layout_constraintTop_toTopOf="parent"> - + - - - - + android:layout_margin="16dp" + android:contentDescription="@string/reading" + android:minWidth="56dp" + android:text="@string/reading" + android:textColor="?attr/colorOnPrimary" + app:backgroundTint="?attr/colorTertiary" + app:icon="@drawable/ic_bottom_books" + app:iconTint="?attr/colorOnPrimary" + app:layout_anchor="@id/refresh_layout" + app:layout_anchorGravity="bottom|end" />