From 70a269a5b5342ea5c311d837c72fde007f4b3ef1 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 20 Feb 2025 19:21:53 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/core/ui/components/Flicker.kt | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/Flicker.kt b/core/ui/src/main/java/com/tangem/core/ui/components/Flicker.kt index 9aaf9c0362..357e123c64 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/Flicker.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/Flicker.kt @@ -1,7 +1,9 @@ package com.tangem.core.ui.components import android.content.res.Configuration -import androidx.compose.animation.core.* +import androidx.compose.animation.core.CubicBezierEasing +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box @@ -10,7 +12,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.composed -import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.tooling.preview.Preview import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview @@ -27,26 +29,28 @@ fun Modifier.flicker( targetTextAlpha: Float = 0.4f, animationDurationMillis: Int = 1200, ): Modifier = composed { - val infiniteTransition = rememberInfiniteTransition() - val defaultAlpha = remember { mutableFloatStateOf(value = 1f) } + var alphaChange by remember { mutableStateOf(false) } - val alpha: Float by if (isFlickering) { - infiniteTransition.animateFloat( - initialValue = 1f, - targetValue = targetTextAlpha, - animationSpec = infiniteRepeatable( - animation = tween( - durationMillis = animationDurationMillis, - easing = CubicBezierEasing(a = 0.45f, b = 0.0f, c = 0.55f, d = 1.0f), - ), - repeatMode = RepeatMode.Reverse, - ), - ) - } else { - defaultAlpha + val alpha: Float by animateFloatAsState( + targetValue = if (alphaChange) targetTextAlpha else 1f, + animationSpec = tween( + durationMillis = animationDurationMillis, + easing = CubicBezierEasing(a = 0.45f, b = 0.0f, c = 0.55f, d = 1.0f), + ), + finishedListener = { + alphaChange = it == 1f && isFlickering + }, + ) + + LaunchedEffect(isFlickering) { + if (isFlickering) { + alphaChange = true + } } - this.then(alpha(alpha)) + this.graphicsLayer { + this.alpha = alpha + } } // region Preview