Skip to content

Instantly share code, notes, and snippets.

@mazzouzi
mazzouzi / MainActivity.kt
Last active October 6, 2022 08:09
Toolbar composable
@Composable
private fun Toolbar(scroll: ScrollState, headerHeightPx: Float, toolbarHeightPx: Float) {
val toolbarBottom = headerHeightPx - toolbarHeightPx
val showToolbar by remember {
derivedStateOf { scroll.value >= toolbarBottom }
}
AnimatedVisibility(
visible = showToolbar,
enter = fadeIn(animationSpec = tween(300)),
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 26, 2022 19:55
Adjust linear interpolation
val titleXFirstInterpolatedPoint = lerp(
titlePaddingStart,
(titlePaddingEnd - titleExtraStartPadding) * 5 / 4,
collapseFraction
)
val titleXSecondInterpolatedPoint = lerp(
(titlePaddingEnd - titleExtraStartPadding) * 5 / 4,
titlePaddingEnd - titleExtraStartPadding,
collapseFraction
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 26, 2022 19:55
Extra padding cancellation
val titleExtraStartPadding = titleWidthPx.toDp() * (1 - scaleXY.value) / 2
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 26, 2022 12:33
Title composable with linear bézier curve
@Composable
private fun Title(scroll: ScrollState, headerHeightPx: Float, toolbarHeightPx: Float) {
var titleHeightPx by remember { mutableStateOf(0f) }
val titleHeightDp = with(LocalDensity.current) { titleHeightPx.toDp() }
Text(
text = "New York",
fontSize = 30.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:49
Title scale animation
private const val titleFontScaleStart = 1f
private const val titleFontScaleEnd = 0.66f
@Composable
private fun Title(scroll: ScrollState, headerHeightPx: Float, toolbarHeightPx: Float) {
val collapseRange: Float = (headerHeightPx - toolbarHeightPx)
val collapseFraction: Float = (scroll.value / collapseRange).coerceIn(0f, 1f)
val scaleXY = lerp(
titleFontScaleStart.dp,
titleFontScaleEnd.dp,
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:49
Bernstein polynomial form
.
.
Text(
text = "New York",
fontSize = 30.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier
.graphicsLayer {
val collapseRange: Float = (headerHeightPx - toolbarHeightPx)
val collapseFraction: Float = (scroll.value / collapseRange).coerceIn(0f, 1f)
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:49
Quadratic Bézier Curve translation
.
.
Text(
text = "New York",
fontSize = 30.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier
.graphicsLayer {
translationY = titleY.toPx()
translationX = titleX.toPx()
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:49
lerp Y axis
val titleY = lerp(
titleYFirstInterpolatedPoint,
titleYSecondInterpolatedPoint,
collapseFraction
)
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:49
lerp X axis
val titleX = lerp(
titleXFirstInterpolatedPoint,
titleXSecondInterpolatedPoint,
collapseFraction
)
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:48
lerp P1P2 - X axis
val titleXSecondInterpolatedPoint = lerp(
titlePaddingEnd * 5 / 4,
titlePaddingEnd,
collapseFraction
)