From 764eedc8376be46fae16e884274230d7d68d81b8 Mon Sep 17 00:00:00 2001 From: Sweetbread Date: Wed, 23 Apr 2025 19:55:32 +0300 Subject: [PATCH] impr: add animation --- .../ru/sweetbread/unn/ui/composes/Schedule.kt | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/ru/sweetbread/unn/ui/composes/Schedule.kt b/app/src/main/java/ru/sweetbread/unn/ui/composes/Schedule.kt index eb5f58b..d43be89 100644 --- a/app/src/main/java/ru/sweetbread/unn/ui/composes/Schedule.kt +++ b/app/src/main/java/ru/sweetbread/unn/ui/composes/Schedule.kt @@ -1,7 +1,13 @@ +/* + * Created by sweetbread + * Copyright (c) 2025. All rights reserved. + */ + package ru.sweetbread.unn.ui.composes import android.util.Log import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.Canvas import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -147,6 +153,8 @@ fun ScheduleItem(modifier: Modifier = Modifier, unit: ScheduleUnit, expanded: Bo val now = LocalDateTime.now().atZone(ZoneId.of("Europe/Moscow")).toEpochSecond() if (begin > now) return -1f + if (now > end) + return 1f return (now - begin) / (end - begin).toFloat() } @@ -166,16 +174,22 @@ fun ScheduleItem(modifier: Modifier = Modifier, unit: ScheduleUnit, expanded: Bo } } + val backgroundColor by animateColorAsState( + targetValue = if (rel == 1f) + MaterialTheme.colorScheme.surfaceContainer + else if (rel == -1f) + MaterialTheme.colorScheme.secondaryContainer + else + MaterialTheme.colorScheme.primaryContainer, + label = "backgroundTransition" + ) + Row ( modifier .fillMaxWidth() .padding(4.dp) .clip(RoundedCornerShape(8.dp)) - .background( - if (rel != -1f) - MaterialTheme.colorScheme.primaryContainer - else MaterialTheme.colorScheme.surfaceContainer - ) + .background(backgroundColor) .padding(8.dp) ){ Column (Modifier.weight(1f)) { @@ -268,14 +282,20 @@ fun ScheduleItem(modifier: Modifier = Modifier, unit: ScheduleUnit, expanded: Bo horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically) { Text(begin.toString(), fontWeight = FontWeight.Bold) - if (rel != -1f) + AnimatedVisibility ( + (0f <= rel) and (rel < 1f), + modifier = Modifier + .weight(1f) + .padding(horizontal = 2.dp) + ) { DividerWithMarker( - Modifier.weight(1f).padding(horizontal = 2.dp), positionPercentage = rel, color = MaterialTheme.colorScheme.outline, thickness = 3.dp, markerSize = 8.dp, - markerColor = MaterialTheme.colorScheme.primary) + markerColor = MaterialTheme.colorScheme.primary + ) + } Text(end.toString()) } }