feat: Add haptic feedback for avatar expansion completion and adjust corner radius behavior
This commit is contained in:
@@ -31,6 +31,7 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.asImageBitmap
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
||||
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
|
||||
import androidx.compose.ui.input.nestedscroll.NestedScrollSource
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
@@ -38,6 +39,7 @@ import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalConfiguration
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
@@ -793,16 +795,29 @@ private fun CollapsingProfileHeader(
|
||||
)
|
||||
}
|
||||
|
||||
// Закругление: круг по умолчанию, при overscroll становится квадратом
|
||||
// Закругление: круг по умолчанию, при overscroll становится квадратом БЕЗ скругления
|
||||
val cornerRadius =
|
||||
if (collapseProgress < 0.1f && expansionProgress > 0f) {
|
||||
// Overscroll: круг -> квадрат с небольшим скруглением
|
||||
androidx.compose.ui.unit.lerp(avatarSize / 2, 12.dp, expansionProgress)
|
||||
// Overscroll: круг -> квадрат без скругления
|
||||
androidx.compose.ui.unit.lerp(avatarSize / 2, 0.dp, expansionProgress)
|
||||
} else {
|
||||
// Всегда круг
|
||||
avatarSize / 2
|
||||
}
|
||||
|
||||
// Haptic feedback при достижении полного квадрата
|
||||
val hapticFeedback = LocalHapticFeedback.current
|
||||
var hasTriggeredHaptic by remember { mutableStateOf(false) }
|
||||
|
||||
LaunchedEffect(expansionProgress) {
|
||||
if (expansionProgress >= 0.95f && !hasTriggeredHaptic) {
|
||||
hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress)
|
||||
hasTriggeredHaptic = true
|
||||
} else if (expansionProgress < 0.5f) {
|
||||
hasTriggeredHaptic = false
|
||||
}
|
||||
}
|
||||
|
||||
val avatarFontSize = androidx.compose.ui.unit.lerp(40.sp, 0.sp, collapseProgress)
|
||||
|
||||
// ═══════════════════════════════════════════════════════════
|
||||
|
||||
Reference in New Issue
Block a user