Skip to content

Commit ccdc22f

Browse files
committed
Add animating background gradient on Jetsnack.
1 parent 696c1b0 commit ccdc22f

1 file changed

Lines changed: 36 additions & 1 deletion

File tree

  • Jetsnack/app/src/main/java/com/example/jetsnack/ui/snackdetail

Jetsnack/app/src/main/java/com/example/jetsnack/ui/snackdetail/SnackDetail.kt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
package com.example.jetsnack.ui.snackdetail
1818

1919
import android.content.res.Configuration
20+
import androidx.compose.animation.core.LinearEasing
21+
import androidx.compose.animation.core.RepeatMode
22+
import androidx.compose.animation.core.animateFloat
23+
import androidx.compose.animation.core.infiniteRepeatable
24+
import androidx.compose.animation.core.rememberInfiniteTransition
25+
import androidx.compose.animation.core.tween
2026
import androidx.compose.foundation.ScrollState
2127
import androidx.compose.foundation.background
2228
import androidx.compose.foundation.clickable
@@ -50,7 +56,12 @@ import androidx.compose.runtime.remember
5056
import androidx.compose.runtime.setValue
5157
import androidx.compose.ui.Alignment
5258
import androidx.compose.ui.Modifier
59+
import androidx.compose.ui.draw.blur
60+
import androidx.compose.ui.draw.drawWithCache
61+
import androidx.compose.ui.geometry.Offset
5362
import androidx.compose.ui.graphics.Brush
63+
import androidx.compose.ui.graphics.TileMode
64+
import androidx.compose.ui.graphics.drawscope.rotate
5465
import androidx.compose.ui.layout.Layout
5566
import androidx.compose.ui.platform.LocalDensity
5667
import androidx.compose.ui.res.stringResource
@@ -112,11 +123,35 @@ fun SnackDetail(
112123

113124
@Composable
114125
private fun Header() {
126+
val brushColors = JetsnackTheme.colors.tornado1
127+
128+
val infiniteTransition = rememberInfiniteTransition(label = "background")
129+
val targetOffset = with (LocalDensity.current) {
130+
1000.dp.toPx()
131+
}
132+
val offset by infiniteTransition.animateFloat(
133+
initialValue = 0f,
134+
targetValue = targetOffset,
135+
animationSpec = infiniteRepeatable(tween(50000, easing = LinearEasing),
136+
repeatMode = RepeatMode.Reverse
137+
),
138+
label = "offset"
139+
)
140+
141+
val brushSize = 400f
142+
val brush = Brush.linearGradient(
143+
colors = brushColors,
144+
start = Offset(offset, offset),
145+
end = Offset( offset + brushSize, offset + brushSize),
146+
tileMode = TileMode.Mirror
147+
)
115148
Spacer(
116149
modifier = Modifier
117150
.height(280.dp)
118151
.fillMaxWidth()
119-
.background(Brush.horizontalGradient(JetsnackTheme.colors.tornado1))
152+
.blur(40.dp)
153+
.background(brush)
154+
120155
)
121156
}
122157

0 commit comments

Comments
 (0)