fix: fix statusbar smoothness
This commit is contained in:
@@ -164,28 +164,47 @@ fun ImageEditorScreen(
|
||||
)
|
||||
}
|
||||
|
||||
// 🎨 Черный статус бар и навигационный бар для редактора
|
||||
// 🎨 Плавная анимация status bar синхронно с fade
|
||||
val activity = context as? Activity
|
||||
val window = activity?.window
|
||||
|
||||
// Сохраняем оригинальные цвета один раз
|
||||
val originalStatusBarColor = remember { window?.statusBarColor ?: android.graphics.Color.WHITE }
|
||||
val originalNavigationBarColor = remember { window?.navigationBarColor ?: android.graphics.Color.WHITE }
|
||||
val insetsController = remember(window, view) { window?.let { WindowCompat.getInsetsController(it, view) } }
|
||||
val originalLightStatusBars = remember { insetsController?.isAppearanceLightStatusBars ?: true }
|
||||
val originalLightNavigationBars = remember { insetsController?.isAppearanceLightNavigationBars ?: true }
|
||||
|
||||
// ⚡ Анимация цвета status bar синхронно с fade
|
||||
LaunchedEffect(animationProgress.value) {
|
||||
if (window == null || insetsController == null) return@LaunchedEffect
|
||||
|
||||
val progress = animationProgress.value
|
||||
|
||||
// Интерполируем цвет: оригинальный (progress=0) -> черный (progress=1)
|
||||
val currentStatusColor = androidx.core.graphics.ColorUtils.blendARGB(
|
||||
originalStatusBarColor,
|
||||
android.graphics.Color.BLACK,
|
||||
progress
|
||||
)
|
||||
val currentNavColor = androidx.core.graphics.ColorUtils.blendARGB(
|
||||
originalNavigationBarColor,
|
||||
android.graphics.Color.BLACK,
|
||||
progress
|
||||
)
|
||||
|
||||
window.statusBarColor = currentStatusColor
|
||||
window.navigationBarColor = currentNavColor
|
||||
|
||||
// Иконки: светлые (false) когда progress > 0.5, иначе оригинальные
|
||||
insetsController.isAppearanceLightStatusBars = progress < 0.5f && originalLightStatusBars
|
||||
insetsController.isAppearanceLightNavigationBars = progress < 0.5f && originalLightNavigationBars
|
||||
}
|
||||
|
||||
// Восстановление при dispose
|
||||
DisposableEffect(window) {
|
||||
if (window == null) return@DisposableEffect onDispose { }
|
||||
|
||||
val originalStatusBarColor = window.statusBarColor
|
||||
val originalNavigationBarColor = window.navigationBarColor
|
||||
|
||||
// 🔥 Сохраняем оригинальное состояние иконок статус бара
|
||||
val insetsController = WindowCompat.getInsetsController(window, view)
|
||||
val originalLightStatusBars = insetsController.isAppearanceLightStatusBars
|
||||
val originalLightNavigationBars = insetsController.isAppearanceLightNavigationBars
|
||||
|
||||
// Устанавливаем черный цвет и светлые иконки
|
||||
window.statusBarColor = android.graphics.Color.BLACK
|
||||
window.navigationBarColor = android.graphics.Color.BLACK
|
||||
insetsController.isAppearanceLightStatusBars = false // Светлые иконки на черном фоне
|
||||
insetsController.isAppearanceLightNavigationBars = false
|
||||
|
||||
onDispose {
|
||||
// Восстанавливаем оригинальные цвета и состояние иконок
|
||||
if (window == null || insetsController == null) return@onDispose
|
||||
window.statusBarColor = originalStatusBarColor
|
||||
window.navigationBarColor = originalNavigationBarColor
|
||||
insetsController.isAppearanceLightStatusBars = originalLightStatusBars
|
||||
@@ -1520,28 +1539,47 @@ fun MultiImageEditorScreen(
|
||||
}
|
||||
}
|
||||
|
||||
// 🎨 Черный статус бар и навигационный бар для редактора
|
||||
// 🎨 Плавная анимация status bar синхронно с fade
|
||||
val activity = context as? Activity
|
||||
val window = activity?.window
|
||||
|
||||
// Сохраняем оригинальные цвета один раз
|
||||
val originalStatusBarColor = remember { window?.statusBarColor ?: android.graphics.Color.WHITE }
|
||||
val originalNavigationBarColor = remember { window?.navigationBarColor ?: android.graphics.Color.WHITE }
|
||||
val insetsController = remember(window, view) { window?.let { WindowCompat.getInsetsController(it, view) } }
|
||||
val originalLightStatusBars = remember { insetsController?.isAppearanceLightStatusBars ?: true }
|
||||
val originalLightNavigationBars = remember { insetsController?.isAppearanceLightNavigationBars ?: true }
|
||||
|
||||
// ⚡ Анимация цвета status bar синхронно с fade
|
||||
LaunchedEffect(animationProgress.value) {
|
||||
if (window == null || insetsController == null) return@LaunchedEffect
|
||||
|
||||
val progress = animationProgress.value
|
||||
|
||||
// Интерполируем цвет: оригинальный (progress=0) -> черный (progress=1)
|
||||
val currentStatusColor = androidx.core.graphics.ColorUtils.blendARGB(
|
||||
originalStatusBarColor,
|
||||
android.graphics.Color.BLACK,
|
||||
progress
|
||||
)
|
||||
val currentNavColor = androidx.core.graphics.ColorUtils.blendARGB(
|
||||
originalNavigationBarColor,
|
||||
android.graphics.Color.BLACK,
|
||||
progress
|
||||
)
|
||||
|
||||
window.statusBarColor = currentStatusColor
|
||||
window.navigationBarColor = currentNavColor
|
||||
|
||||
// Иконки: светлые (false) когда progress > 0.5, иначе оригинальные
|
||||
insetsController.isAppearanceLightStatusBars = progress < 0.5f && originalLightStatusBars
|
||||
insetsController.isAppearanceLightNavigationBars = progress < 0.5f && originalLightNavigationBars
|
||||
}
|
||||
|
||||
// Восстановление при dispose
|
||||
DisposableEffect(window) {
|
||||
if (window == null) return@DisposableEffect onDispose { }
|
||||
|
||||
val originalStatusBarColor = window.statusBarColor
|
||||
val originalNavigationBarColor = window.navigationBarColor
|
||||
|
||||
// 🔥 Сохраняем оригинальное состояние иконок статус бара
|
||||
val insetsController = WindowCompat.getInsetsController(window, view)
|
||||
val originalLightStatusBars = insetsController.isAppearanceLightStatusBars
|
||||
val originalLightNavigationBars = insetsController.isAppearanceLightNavigationBars
|
||||
|
||||
// Устанавливаем черный цвет и светлые иконки
|
||||
window.statusBarColor = android.graphics.Color.BLACK
|
||||
window.navigationBarColor = android.graphics.Color.BLACK
|
||||
insetsController.isAppearanceLightStatusBars = false // Светлые иконки на черном фоне
|
||||
insetsController.isAppearanceLightNavigationBars = false
|
||||
|
||||
onDispose {
|
||||
// Восстанавливаем оригинальные цвета и состояние иконок
|
||||
if (window == null || insetsController == null) return@onDispose
|
||||
window.statusBarColor = originalStatusBarColor
|
||||
window.navigationBarColor = originalNavigationBarColor
|
||||
insetsController.isAppearanceLightStatusBars = originalLightStatusBars
|
||||
|
||||
Reference in New Issue
Block a user