Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
449 of 502 menu
◀ ▶

Функция spring

Функция spring создаёт SpringSpec с физикой пружины. Параметры dampingRatio и stiffness задают затухание и жёсткость. Подходит для живых переходов в UI, когда нужен лёгкий overshoot. Передают в animationSpec у animateFloatAsState и animateTo.

Синтаксис

spring(dampingRatio = 0.6f, stiffness = 300f)

Параметры

Параметр Описание
dampingRatio Затухание колебаний, 1 без перелёта.
stiffness Жёсткость пружины, выше - быстрее отклик.
visibilityThreshold Порог, когда анимация считается завершённой.

Пример

Давайте пружиной изменим масштаб текста:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.spring import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.scale class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var on by remember { mutableStateOf(false) } val scale by animateFloatAsState( targetValue = if (on) 1.2f else 1f, animationSpec = spring(stiffness = 400f), label = "12345", ) Button(onClick = { on = !on }) { Text( text = "12345", modifier = Modifier.scale(scale), ) } } } }

На экране текст слегка перелетает цель и затухает при смене масштаба.

Смотрите также

  • функция tween,
    которую выбирают для фиксированной длительности
  • функция animateFloatAsState,
    которая использует spring в animationSpec
  • метод animateTo,
    который анимирует значение с spring
  • функция AnimatedVisibility,
    где spring часто задают для появления
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить