From 0722e2a6670911f2d5ac4178efffbfe86e097f0a Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Wed, 25 Mar 2026 15:28:43 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/main/bookshelf/BookshelfScreen.kt | 4 +-- .../GlassMediumFlexibleTopAppBar.kt | 8 +++++ .../components/topbar/DynamicTopAppBar.kt | 30 +++++++++++++++++-- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfScreen.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfScreen.kt index c02a4e5d2..98e872661 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfScreen.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfScreen.kt @@ -60,6 +60,7 @@ import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.ClipEntry import androidx.compose.ui.platform.LocalClipboard import androidx.compose.ui.platform.LocalConfiguration @@ -77,7 +78,6 @@ import io.legado.app.ui.book.import.remote.RemoteBookActivity import io.legado.app.ui.book.manage.BookshelfManageActivity import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.config.bookshelfConfig.BookshelfConfig -import io.legado.app.ui.widget.components.GlassTopAppBarDefaults import io.legado.app.ui.widget.components.button.SmallOutlinedIconToggleButton import io.legado.app.ui.widget.components.filePicker.FilePickerSheet import io.legado.app.ui.widget.components.importComponents.SourceInputDialog @@ -324,7 +324,7 @@ fun BookshelfScreen( selectedTabIndex = selectedTabIndex, edgePadding = 0.dp, divider = { }, - containerColor = GlassTopAppBarDefaults.containerColor(), + containerColor = Color.Transparent, minTabWidth = 0.dp, modifier = Modifier.weight(1f) ) { diff --git a/app/src/main/java/io/legado/app/ui/widget/components/GlassMediumFlexibleTopAppBar.kt b/app/src/main/java/io/legado/app/ui/widget/components/GlassMediumFlexibleTopAppBar.kt index 28a90d991..e3117f5ee 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/GlassMediumFlexibleTopAppBar.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/GlassMediumFlexibleTopAppBar.kt @@ -87,6 +87,14 @@ object GlassTopAppBarDefaults { ) } + @Composable + fun scrolledContainerColor(): Color { + return GlassDefaults.glassColor( + noBlurColor = MaterialTheme.colorScheme.surfaceContainer, + blurAlpha = GlassDefaults.TransparentAlpha + ) + } + @Composable fun controlContainerColor(): Color { return GlassDefaults.glassColor( diff --git a/app/src/main/java/io/legado/app/ui/widget/components/topbar/DynamicTopAppBar.kt b/app/src/main/java/io/legado/app/ui/widget/components/topbar/DynamicTopAppBar.kt index cd9de42f6..dca7f7d9a 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/topbar/DynamicTopAppBar.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/topbar/DynamicTopAppBar.kt @@ -1,14 +1,17 @@ package io.legado.app.ui.widget.components.topbar import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.animateColorAsState import androidx.compose.animation.expandVertically import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.shrinkVertically +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Close @@ -16,17 +19,22 @@ import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material.icons.filled.Search import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.lerp import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.style.TextOverflow import io.legado.app.ui.widget.components.AdaptiveAnimatedText import io.legado.app.ui.widget.components.AnimatedTextLine import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar +import io.legado.app.ui.widget.components.GlassTopAppBarDefaults import io.legado.app.ui.widget.components.SearchBarSection import io.legado.app.ui.widget.components.button.TopBarActionButton import io.legado.app.ui.widget.components.button.TopbarNavigationButton @@ -56,7 +64,21 @@ fun DynamicTopAppBar( var showMenu by remember { mutableStateOf(false) } val isSelecting = state.selectedIds.isNotEmpty() - Column { + val containerColor = GlassTopAppBarDefaults.containerColor() + val scrolledColor = GlassTopAppBarDefaults.scrolledContainerColor() + + val collapsedFraction = scrollBehavior.state.collapsedFraction + + val animatedColor by animateColorAsState( + targetValue = lerp(containerColor, scrolledColor, collapsedFraction), + label = "TopBarContainerColor" + ) + + Column( + modifier = Modifier + .fillMaxWidth() + .background(animatedColor) + ) { GlassMediumFlexibleTopAppBar( title = { val titleText = when { @@ -110,7 +132,11 @@ fun DynamicTopAppBar( } } }, - scrollBehavior = scrollBehavior + scrollBehavior = scrollBehavior, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent, + scrolledContainerColor = Color.Transparent + ) ) AnimatedVisibility(