Skip to content

Instantly share code, notes, and snippets.

@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:47
lerp P0P1 - Y axis
val titleYFirstInterpolatedPoint = lerp(
headerHeight - titleHeightDp - paddingMedium,
headerHeight / 2,
collapseFraction
)
@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:46
t calculation
val collapseRange: Float = (headerHeightPx - toolbarHeightPx)
val collapseFraction: Float = (scroll.value / collapseRange).coerceIn(0f, 1f)
@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 24, 2022 11:30
Header composable
@Composable
private fun Header(scroll: ScrollState, headerHeightPx: Float) {
Box(modifier = Modifier
.fillMaxWidth()
.height(headerHeight)
.graphicsLayer {
alpha = (-1f / headerHeightPx) * scroll.value + 1
}
)
.
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:46
Title composable
@Composable
private fun Title() {
Text(
text = "New York",
fontSize = 30.sp,
fontWeight = FontWeight.Bold
)
}
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:45
Toolbar composable
@Composable
private fun Toolbar() {
TopAppBar(
modifier = Modifier.background(
brush = Brush.horizontalGradient(
listOf(Color(0xff026586), Color(0xff032C45))
)
),
navigationIcon = {
IconButton(
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:46
Header parallax effect
@Composable
private fun Header(scroll: ScrollState, headerHeightPx: Float) {
Box(modifier = Modifier
.fillMaxWidth()
.height(headerHeight)
.graphicsLayer {
translationY = -scroll.value.toFloat() / 2f // Parallax effect
}
)
@mazzouzi
mazzouzi / MainActivity.kt
Last active September 24, 2022 11:45
Body composable (scrollState)
@Composable
private fun Body(scroll: ScrollState) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.verticalScroll(scroll)
)
.
.
@mazzouzi
mazzouzi / MainActivity.kt
Created September 18, 2022 17:46
ScrollState
val scroll: ScrollState = rememberScrollState(0)