优化底栏图标与降级玻璃细节
This commit is contained in:
1 parent
27154a3a4e
commit
56d181bce3
6 files changed
+37
-21
No files matched your search
@@ -173,7 +173,7 @@ private fun ServerCard(server: EmbyServer, tint: Color, onClick: () -> Unit, onC
|
||||
LumaAsyncImage(model = ImageRequest.Builder(LocalContext.current).data(server.iconUrl).crossfade(true).build(), contentDescription = null, modifier = Modifier.size(46.dp).clip(RoundedCornerShape(14.dp)), contentScale = ContentScale.Crop)
|
||||
} else {
|
||||
Box(Modifier.size(46.dp).clip(RoundedCornerShape(14.dp)).background(Brush.linearGradient(listOf(tint, tint.copy(alpha = 0.7f)))), contentAlignment = Alignment.Center) {
|
||||
LumaIconView(LumaIcon.Play, contentDescription = null, tint = Color.White, modifier = Modifier.size(26.dp))
|
||||
LumaIconView(LumaIcon.Server, contentDescription = null, tint = Color.White, modifier = Modifier.size(26.dp))
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.width(12.dp))
|
||||
@@ -237,7 +237,7 @@ private fun ServerGridCard(server: EmbyServer, tint: Color, onClick: () -> Unit,
|
||||
Modifier.size(48.dp).clip(RoundedCornerShape(14.dp)).background(Brush.linearGradient(listOf(tint, tint.copy(alpha = 0.7f)))),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
LumaIconView(LumaIcon.Play, contentDescription = null, tint = Color.White, modifier = Modifier.size(26.dp))
|
||||
LumaIconView(LumaIcon.Server, contentDescription = null, tint = Color.White, modifier = Modifier.size(26.dp))
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.width(10.dp))
|
||||
@@ -517,12 +517,17 @@ internal fun IconLibraryManagerScreenContent(
|
||||
) {
|
||||
Box(Modifier.width(86.dp)) {
|
||||
Box(
|
||||
Modifier.size(34.dp)
|
||||
.lumaGlass(radius = 17.dp, level = com.example.myapplication.ui.design.LumaGlassLevel.Floating)
|
||||
Modifier.size(48.dp)
|
||||
.clickable(indication = null, interactionSource = remember { MutableInteractionSource() }) { onBack() },
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
LumaIconView(LumaIcon.Close, contentDescription = stringResource(Res.string.back), tint = GlassTokens.text, modifier = Modifier.size(19.dp))
|
||||
Box(
|
||||
Modifier.size(34.dp)
|
||||
.lumaGlass(radius = 17.dp, level = com.example.myapplication.ui.design.LumaGlassLevel.Floating),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
LumaIconView(LumaIcon.Close, contentDescription = stringResource(Res.string.back), tint = GlassTokens.text, modifier = Modifier.size(19.dp))
|
||||
}
|
||||
}
|
||||
}
|
||||
Box(Modifier.weight(1f), contentAlignment = Alignment.Center) {
|
||||
|
||||
@@ -74,7 +74,7 @@ fun LiquidAppBottomBar(
|
||||
selected = selectedTab == index,
|
||||
contentDescription = stringResource(tab.labelRes),
|
||||
tint = if (isGhostLayer) Color.White else if (selectedTab == index) LumaColors.accent else inactive,
|
||||
modifier = Modifier.size(33.dp),
|
||||
modifier = Modifier.size(36.dp),
|
||||
)
|
||||
Spacer(Modifier.height(3.dp))
|
||||
Text(
|
||||
@@ -136,7 +136,7 @@ fun LiquidAppBottomBar(
|
||||
icon = LumaIcon.Search,
|
||||
contentDescription = null,
|
||||
tint = if (searchSelected) LumaColors.accent else inactive,
|
||||
modifier = Modifier.size(37.dp),
|
||||
modifier = Modifier.size(41.dp),
|
||||
)
|
||||
Text(
|
||||
text = stringResource(Res.string.search),
|
||||
|
||||
@@ -358,7 +358,7 @@ fun GlassSearchField(
|
||||
if (value.isNotEmpty()) {
|
||||
Box(
|
||||
Modifier
|
||||
.size(40.dp)
|
||||
.size(48.dp)
|
||||
.clickable(
|
||||
indication = null,
|
||||
interactionSource = remember { MutableInteractionSource() },
|
||||
|
||||
@@ -221,7 +221,11 @@ fun Modifier.lumaFallbackGlass(
|
||||
Color(0xFF121B27).copy(alpha = 0.46f)
|
||||
}
|
||||
val edge = if (selected) {
|
||||
LumaColors.glassHighlight.copy(alpha = if (light) 0.34f else 0.26f)
|
||||
if (light) {
|
||||
Color(0xFF9BA8B8).copy(alpha = 0.28f)
|
||||
} else {
|
||||
Color.White.copy(alpha = 0.22f)
|
||||
}
|
||||
} else {
|
||||
LumaColors.glassHighlight.copy(alpha = if (light) 0.18f else 0.14f)
|
||||
}
|
||||
@@ -229,19 +233,19 @@ fun Modifier.lumaFallbackGlass(
|
||||
if (light) {
|
||||
Brush.horizontalGradient(
|
||||
listOf(
|
||||
LumaColors.accent.copy(alpha = 0.10f),
|
||||
Color.White.copy(alpha = 0.40f),
|
||||
Color.White.copy(alpha = 0.30f),
|
||||
LumaColors.accent.copy(alpha = 0.08f),
|
||||
Color.White.copy(alpha = 0.44f),
|
||||
Color.White.copy(alpha = 0.66f),
|
||||
Color(0xFFDCE3EB).copy(alpha = 0.48f),
|
||||
Color.White.copy(alpha = 0.38f),
|
||||
),
|
||||
)
|
||||
} else {
|
||||
Brush.horizontalGradient(
|
||||
listOf(
|
||||
LumaColors.accent.copy(alpha = 0.28f),
|
||||
Color.White.copy(alpha = 0.16f),
|
||||
Color.White.copy(alpha = 0.08f),
|
||||
LumaColors.accent.copy(alpha = 0.18f),
|
||||
Color(0xFF46515F).copy(alpha = 0.30f),
|
||||
Color.White.copy(alpha = 0.20f),
|
||||
Color(0xFF202A36).copy(alpha = 0.28f),
|
||||
),
|
||||
)
|
||||
}
|
||||
@@ -256,23 +260,23 @@ fun Modifier.lumaFallbackGlass(
|
||||
Modifier.drawWithCache {
|
||||
val leftGlow = Brush.radialGradient(
|
||||
colors = listOf(
|
||||
LumaColors.accent.copy(alpha = if (light) 0.14f else 0.18f),
|
||||
LumaColors.accent.copy(alpha = 0.04f),
|
||||
Color.White.copy(alpha = if (light) 0.26f else 0.18f),
|
||||
Color.White.copy(alpha = if (light) 0.08f else 0.05f),
|
||||
Color.Transparent,
|
||||
),
|
||||
center = Offset(size.width * 0.14f, size.height * 0.18f),
|
||||
center = Offset(size.width * 0.28f, size.height * 0.18f),
|
||||
radius = size.height * 1.25f,
|
||||
)
|
||||
val rightGlow = Brush.radialGradient(
|
||||
colors = listOf(
|
||||
Color.White.copy(alpha = if (light) 0.28f else 0.16f),
|
||||
Color.White.copy(alpha = if (light) 0.34f else 0.18f),
|
||||
Color.Transparent,
|
||||
),
|
||||
center = Offset(size.width * 0.86f, size.height * 0.22f),
|
||||
radius = size.height * 0.92f,
|
||||
)
|
||||
onDrawWithContent {
|
||||
drawCircle(leftGlow, center = Offset(size.width * 0.14f, size.height * 0.18f), radius = size.height * 1.25f)
|
||||
drawCircle(leftGlow, center = Offset(size.width * 0.28f, size.height * 0.18f), radius = size.height * 1.25f)
|
||||
drawCircle(rightGlow, center = Offset(size.width * 0.86f, size.height * 0.22f), radius = size.height * 0.92f)
|
||||
drawContent()
|
||||
}
|
||||
|
||||
@@ -130,3 +130,9 @@
|
||||
文件变更: app/build.gradle.kts、screens/HomeScreen.kt、screens/RecordsScreen.kt、screens/SearchScreen.kt、screens/VideoPlayerScreen.kt、ui/design/LumaComponents.kt、memory/*。
|
||||
教训: 启动截图需等待启动流程完成后再判断加载态;当前 API35 模拟器仍只验证安全降级玻璃,不能代替真机 Backdrop 逐帧比对。
|
||||
标签: #lumaplayer #loading #skeleton #player #accessibility #build
|
||||
|
||||
[PROJECT:lumaplayer] 底栏图标与资源库细节复核
|
||||
结论: 底栏普通图标调整为 36dp、搜索图标 41dp,资源库空图标改为服务器图标;搜索清除和图标库返回保留原视觉并补足 48dp 触控范围;API35 模拟器启动、设置页和语言悬浮菜单无异常。
|
||||
文件变更: screens/LibraryScreen.kt、ui/AppBottomBar.kt、ui/LiquidGlass.kt、ui/design/LumaDesignSystem.kt。
|
||||
教训: 降级玻璃必须保持独立胶囊几何,不能让菜单或选中态参与页面列表测量;本地参考素材继续排除提交。
|
||||
标签: #lumaplayer #bottom-bar #accessibility #fallback-glass #emulator #build
|
||||
@@ -35,3 +35,4 @@
|
||||
- 2026-08-27:底栏普通图标调整为 33dp、搜索图标 37dp;降级玻璃增加最终 Capsule 裁剪并减弱蓝色选中填充,原生路径空闲态保留轻微 Lens;详情/播放器/剧集加载和播放地址失败时回落到错误态;最终 APK 在 API 35 模拟器启动、Vision/Settings/语言菜单点击复核成功。
|
||||
- 2026-08-27:收敛公共分段控件、弹出菜单、按钮、输入框及语言菜单的降级玻璃路径,移除纯色方框;补充深色主题系统栏图标同步和操作标题 48dp 点击区域。`assembleDebug`、`lintDebug`、`testDebugUnitTest` 成功,API 35 模拟器验证设置/语言/主题/关于/服务器添加链路无崩溃;本地参考素材仍未跟踪。
|
||||
- 2026-08-27:播放器进度条替换为自绘拖拽控件并补充无障碍进度调节,Home/Vision/Search 的媒体加载态改为统一骨架占位;移除未使用的 Material 图标依赖。`assembleDebug`、`lintDebug`、`testDebugUnitTest` 成功。
|
||||
- 2026-08-27:底栏图标调整为 36dp、搜索图标 41dp,资源库无图标服务器使用正确的服务器图标;搜索清除与图标库返回补足 48dp 触控范围。完整 Debug/Lint/Unit 构建和 API35 模拟器回归通过。
|
||||
Reference in new issue
Block a user