feat: Enhance avatar animation with sharp expansion effect for smoother transitions
This commit is contained in:
@@ -757,6 +757,10 @@ private fun CollapsingProfileHeader(
|
||||
// Зона аватарки = ВСЯ высота header включая статус бар
|
||||
val avatarZoneHeight = EXPANDED_HEADER_HEIGHT + statusBarHeight
|
||||
|
||||
// Резкая анимация - используем easeOut (быстро в начале, медленно в конце)
|
||||
// sqrt делает анимацию более резкой/быстрой
|
||||
val sharpExpansion = kotlin.math.sqrt(expansionProgress.toDouble()).toFloat()
|
||||
|
||||
// При overscroll расширяем до прямоугольника на всю зону (только если не collapsed И есть
|
||||
// аватарка)
|
||||
val avatarWidth: Dp
|
||||
@@ -764,9 +768,9 @@ private fun CollapsingProfileHeader(
|
||||
|
||||
if (hasAvatar && collapseProgress < 0.1f && expansionProgress > 0f) {
|
||||
// Overscroll: круг -> прямоугольник на всю зону ВКЛЮЧАЯ статус бар (ТОЛЬКО С АВАТАРКОЙ)
|
||||
avatarWidth = androidx.compose.ui.unit.lerp(circleSize, screenWidthDp, expansionProgress)
|
||||
avatarHeight =
|
||||
androidx.compose.ui.unit.lerp(circleSize, avatarZoneHeight, expansionProgress)
|
||||
// Используем sharpExpansion для резкой анимации
|
||||
avatarWidth = androidx.compose.ui.unit.lerp(circleSize, screenWidthDp, sharpExpansion)
|
||||
avatarHeight = androidx.compose.ui.unit.lerp(circleSize, avatarZoneHeight, sharpExpansion)
|
||||
} else {
|
||||
// Collapse: сразу начинаем уменьшаться от круга до 0
|
||||
val collapsedSize = androidx.compose.ui.unit.lerp(circleSize, 0.dp, collapseProgress)
|
||||
@@ -787,7 +791,8 @@ private fun CollapsingProfileHeader(
|
||||
val avatarY =
|
||||
if (hasAvatar && collapseProgress < 0.1f && expansionProgress > 0f) {
|
||||
// При overscroll прижимаемся к самому верху (ТОЛЬКО С АВАТАРКОЙ)
|
||||
androidx.compose.ui.unit.lerp(defaultCenterY, topAvatarY, expansionProgress)
|
||||
// Используем sharpExpansion для резкой анимации
|
||||
androidx.compose.ui.unit.lerp(defaultCenterY, topAvatarY, sharpExpansion)
|
||||
} else {
|
||||
// Collapse: сразу начинаем уходить вверх
|
||||
androidx.compose.ui.unit.lerp(
|
||||
@@ -797,12 +802,12 @@ private fun CollapsingProfileHeader(
|
||||
)
|
||||
}
|
||||
|
||||
// Закругление: круг по умолчанию, при overscroll становится квадратом БЕЗ скругления (ТОЛЬКО С
|
||||
// Закругление: круг по умолчанию, при overscroll плавно становится квадратом (ТОЛЬКО С
|
||||
// АВАТАРКОЙ)
|
||||
val cornerRadius =
|
||||
if (hasAvatar && collapseProgress < 0.1f && expansionProgress > 0f) {
|
||||
// Overscroll: круг -> квадрат без скругления
|
||||
androidx.compose.ui.unit.lerp(avatarSize / 2, 0.dp, expansionProgress)
|
||||
// Overscroll: круг -> квадрат без скругления (резкая анимация)
|
||||
androidx.compose.ui.unit.lerp(avatarSize / 2, 0.dp, sharpExpansion)
|
||||
} else {
|
||||
// Всегда круг
|
||||
avatarSize / 2
|
||||
|
||||
Reference in New Issue
Block a user