Explorar o código

[优化] 优化代码

HapeLee hai 7 meses
pai
achega
0722e2a667

+ 2 - 2
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)
                         ) {

+ 8 - 0
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(

+ 28 - 2
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 <T> 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 <T> DynamicTopAppBar(
                     }
                 }
             },
-            scrollBehavior = scrollBehavior
+            scrollBehavior = scrollBehavior,
+            colors = TopAppBarDefaults.topAppBarColors(
+                containerColor = Color.Transparent,
+                scrolledContainerColor = Color.Transparent
+            )
         )
 
         AnimatedVisibility(