From 082c42e177aafefc0d7e0a6e026961088cc5cd07 Mon Sep 17 00:00:00 2001
From: beyond
Date: Sat, 5 Sep 2026 18:34:21 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../myapplication/screens/HomeScreen.kt | 19 +++++----
.../screens/MediaDetailScreen.kt | 41 ++++++++++---------
2 files changed, 33 insertions(+), 27 deletions(-)
diff --git a/app/src/main/kotlin/com/example/myapplication/screens/HomeScreen.kt b/app/src/main/kotlin/com/example/myapplication/screens/HomeScreen.kt
index f0d31ec..5ad02cb 100644
--- a/app/src/main/kotlin/com/example/myapplication/screens/HomeScreen.kt
+++ b/app/src/main/kotlin/com/example/myapplication/screens/HomeScreen.kt
@@ -305,11 +305,16 @@ private fun FeaturedItemBanner(
Box(Modifier.fillMaxSize().background(
Brush.verticalGradient(
0f to Color.Transparent,
- 0.38f to Color.Transparent,
- 0.56f to immersive.hero.copy(alpha = 0.10f),
- 0.72f to immersive.hero.copy(alpha = 0.34f),
- 0.88f to immersive.pageTop.copy(alpha = 0.76f),
- 1f to immersive.pageTop,
+ 0.30f to Color.Transparent,
+ 0.45f to immersive.hero.copy(alpha = 0.06f),
+ 0.55f to immersive.hero.copy(alpha = 0.14f),
+ 0.63f to immersive.hero.copy(alpha = 0.24f),
+ 0.70f to immersive.hero.copy(alpha = 0.36f),
+ 0.77f to immersive.hero.copy(alpha = 0.50f),
+ 0.83f to immersive.hero.copy(alpha = 0.66f),
+ 0.89f to immersive.hero.copy(alpha = 0.80f),
+ 0.94f to immersive.hero.copy(alpha = 0.92f),
+ 1f to immersive.hero,
)
))
@@ -880,8 +885,8 @@ fun HomeScreen(
}
val homeBackground = if (useImmersiveHomeBackground) {
Brush.verticalGradient(
- 0f to immersiveBackground.pageTop,
- 0.54f to immersiveBackground.pageTop,
+ 0f to immersiveBackground.hero,
+ 0.50f to immersiveBackground.hero,
1f to immersiveBackground.pageBottom,
)
} else {
diff --git a/app/src/main/kotlin/com/example/myapplication/screens/MediaDetailScreen.kt b/app/src/main/kotlin/com/example/myapplication/screens/MediaDetailScreen.kt
index beca8be..9e8fc1a 100644
--- a/app/src/main/kotlin/com/example/myapplication/screens/MediaDetailScreen.kt
+++ b/app/src/main/kotlin/com/example/myapplication/screens/MediaDetailScreen.kt
@@ -47,6 +47,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.BlendMode
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
@@ -468,8 +469,8 @@ fun MediaDetailScreen(
.fillMaxSize()
.background(
Brush.verticalGradient(
- 0f to immersive.pageTop,
- 0.53f to immersive.hero,
+ 0f to immersive.hero,
+ 0.50f to immersive.hero,
1f to immersive.pageBottom,
)
)
@@ -818,7 +819,7 @@ private fun DetailHero(
val posterUrl = EmbyRepository.buildImageUrl(serverUrl, item, maxWidth = 900)
// Keep the detail cover at the same height as the home hero.
- Box(Modifier.fillMaxWidth().aspectRatio(0.84f)) {
+ Box(Modifier.fillMaxWidth().aspectRatio(1.0f)) {
if (backdropUrl != null || posterUrl != null) {
LumaAsyncImage(
model = backdropUrl ?: posterUrl,
@@ -859,21 +860,21 @@ private fun DetailHero(
),
)
- // Long bottom ramp into the same palette-derived background. Most of the
- // artwork stays visible; the transition happens mainly in the lower third.
+ // Bottom ramp: gentle transition into the palette background.
+ // Starts late so most of the artwork stays clear.
Box(
Modifier
.fillMaxSize()
.background(
Brush.verticalGradient(
0f to Color.Transparent,
- 0.34f to background.copy(alpha = 0.03f),
- 0.50f to background.copy(alpha = 0.10f),
- 0.63f to background.copy(alpha = 0.23f),
- 0.73f to background.copy(alpha = 0.41f),
- 0.82f to background.copy(alpha = 0.60f),
- 0.90f to background.copy(alpha = 0.78f),
- 0.96f to background.copy(alpha = 0.92f),
+ 0.48f to Color.Transparent,
+ 0.60f to background.copy(alpha = 0.08f),
+ 0.70f to background.copy(alpha = 0.20f),
+ 0.78f to background.copy(alpha = 0.40f),
+ 0.85f to background.copy(alpha = 0.62f),
+ 0.91f to background.copy(alpha = 0.80f),
+ 0.96f to background.copy(alpha = 0.93f),
1f to background,
)
),
@@ -897,16 +898,16 @@ private fun DetailHeadline(detail: EmbyItem, serverUrl: String) {
horizontalAlignment = Alignment.CenterHorizontally,
) {
Box(
- Modifier.fillMaxWidth().heightIn(min = 58.dp, max = 96.dp),
+ Modifier.fillMaxWidth().heightIn(min = 78.dp, max = 136.dp),
contentAlignment = Alignment.Center,
) {
if (!logoLoaded) {
Text(
text = displayTitle,
color = LocalDetailText.current,
- fontSize = 23.sp,
+ fontSize = 34.sp,
fontWeight = FontWeight.Bold,
- lineHeight = 28.sp,
+ lineHeight = 42.sp,
textAlign = TextAlign.Center,
maxLines = 3,
overflow = TextOverflow.Ellipsis,
@@ -917,7 +918,7 @@ private fun DetailHeadline(detail: EmbyItem, serverUrl: String) {
model = logoUrl,
contentDescription = displayTitle,
contentScale = ContentScale.Fit,
- modifier = Modifier.fillMaxWidth(0.76f).heightIn(max = 96.dp),
+ modifier = Modifier.fillMaxWidth(0.88f).heightIn(max = 136.dp),
onSuccess = { logoLoaded = true },
onError = { logoLoaded = false },
)
@@ -1377,13 +1378,13 @@ private fun CastSection(cast: List, loading: Boolean) {
private fun CastMemberCard(member: DetailCastMember) {
Column(
modifier = Modifier
- .width(92.dp)
- .height(128.dp),
+ .width(84.dp)
+ .height(118.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Box(
Modifier
- .size(88.dp)
+ .size(80.dp)
.clip(CircleShape)
.background(
Brush.linearGradient(
@@ -1416,7 +1417,7 @@ private fun CastMemberCard(member: DetailCastMember) {
Text(
text = member.name,
color = LocalDetailText.current,
- fontSize = 12.sp,
+ fontSize = 11.sp,
fontWeight = FontWeight.SemiBold,
maxLines = 1,
textAlign = TextAlign.Center,