Почему анимация Fade-In не происходит без задержки на 100 мс в запуску в JetPack Compose?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему анимация Fade-In не происходит без задержки на 100 мс в запуску в JetPack Compose?

Сообщение Anonymous »

Я работаю над анимацией в Jetpack Compose, где я хочу отображать числа с эффектом затухания и исчезновения. Каждый номер должен исчезнуть, затем новый номер должен исчезнуть, и этот процесс должен повторяться. Тем не менее, я сталкиваюсь с странной проблемой: < /p>
Проблема: < /strong>
Анимация затухания не произойдет, если я не задерживаю небольшую задержку (Задержка (100)).
Если я опускаю задержку (100), число мерцает, когда оно появляется (внезапно появляется без затухания).
Я уже установил продолжительность Fadein в твина (), но без этой небольшой задержки, Fade-In не происходит. < /p>
Ожидаемое поведение < /strong>:
Предыдущее число исчезает (с указанной продолжительностью погибки).
Новое число исчезает (с указанной продолжительностью Fadein).
Каждый цикл происходит без мерцания. линия Задержка (100) < /p>
Вот код, который я использую: < /p>
internal class MainActivity : AppCompatActivity() {

private val state by lazy { mutableIntStateOf(1) }

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContent {
BannerWithAnimation(state.intValue)
}

lifecycleScope.launch {
delay(2000)
state.intValue = 20
}

lifecycleScope.launch {
delay(40000)
state.intValue = 55
}
}
}

@Composable
fun BannerWithAnimation(num: Int) {

var currentNum by remember { mutableIntStateOf(num) }
var isVisible by remember { mutableStateOf(true) }

LaunchedEffect(num) {
if (num != 1) {
// Fade out the previous number
isVisible = false
delay(7000) // Wait for the previous number's fade-out duration
delay(100) // This small delay is necessary to prevent flickering and trigger fade-in
currentNum = num
// Fade in the new number
isVisible = true
}
}

AnimatedVisibility(
visible = isVisible,
enter = fadeIn(animationSpec = tween(15000)),
exit = fadeOut(animationSpec = tween(7000))
) {
Text(text = "$currentNum", color = Color.Cyan, fontSize = 220.sp)
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... unchedeffe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»