Skip to content

Commit 33396ed

Browse files
committed
✨ Feat: InviteCodeScreen 스크롤시 gradient 효과 추가
1 parent c6aad64 commit 33396ed

File tree

1 file changed

+63
-16
lines changed

1 file changed

+63
-16
lines changed

feature/onboarding/src/main/java/com/twix/onboarding/invite/InviteCodeScreen.kt

Lines changed: 63 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ import androidx.compose.foundation.layout.imePadding
2121
import androidx.compose.foundation.layout.padding
2222
import androidx.compose.foundation.layout.size
2323
import androidx.compose.foundation.layout.width
24+
import androidx.compose.foundation.rememberScrollState
2425
import androidx.compose.foundation.shape.RoundedCornerShape
26+
import androidx.compose.foundation.verticalScroll
2527
import androidx.compose.runtime.Composable
2628
import androidx.compose.runtime.getValue
2729
import androidx.compose.runtime.mutableStateOf
@@ -31,6 +33,8 @@ import androidx.compose.runtime.rememberUpdatedState
3133
import androidx.compose.runtime.setValue
3234
import androidx.compose.ui.Alignment
3335
import androidx.compose.ui.Modifier
36+
import androidx.compose.ui.graphics.Brush
37+
import androidx.compose.ui.graphics.Color
3438
import androidx.compose.ui.graphics.vector.ImageVector
3539
import androidx.compose.ui.platform.LocalClipboard
3640
import androidx.compose.ui.platform.LocalContext
@@ -134,31 +138,20 @@ private fun InviteCodeScreen(
134138
onComplete: () -> Unit,
135139
onCopyInviteCode: () -> Unit,
136140
) {
141+
val scrollState = rememberScrollState()
142+
137143
Box(
138144
modifier =
139145
Modifier
140146
.fillMaxSize()
141147
.background(CommonColor.White),
142148
) {
143-
Box(
149+
Column(
144150
modifier =
145151
Modifier
146-
.fillMaxWidth()
147-
.height(72.dp)
148-
.padding(horizontal = 10.dp, vertical = 14.dp),
149-
contentAlignment = Alignment.CenterStart,
152+
.fillMaxSize()
153+
.verticalScroll(scrollState),
150154
) {
151-
Image(
152-
imageVector = ImageVector.vectorResource(R.drawable.ic_arrow_m_left),
153-
contentDescription = null,
154-
modifier =
155-
Modifier
156-
.size(44.dp)
157-
.noRippleClickable(onClick = navigateToBack),
158-
)
159-
}
160-
161-
Column {
162155
Spacer(modifier = Modifier.height(8.dp))
163156

164157
AnimatedVisibility(
@@ -255,6 +248,29 @@ private fun InviteCodeScreen(
255248
)
256249
}
257250

251+
Box(
252+
modifier =
253+
Modifier
254+
.fillMaxWidth()
255+
.height(72.dp)
256+
.padding(horizontal = 10.dp, vertical = 14.dp),
257+
contentAlignment = Alignment.CenterStart,
258+
) {
259+
Image(
260+
imageVector = ImageVector.vectorResource(R.drawable.ic_arrow_m_left),
261+
contentDescription = null,
262+
modifier =
263+
Modifier
264+
.size(44.dp)
265+
.noRippleClickable(onClick = navigateToBack),
266+
)
267+
}
268+
269+
TopGradientOverlay(
270+
visible = scrollState.value > 0,
271+
modifier = Modifier.align(Alignment.TopCenter),
272+
)
273+
258274
AppButton(
259275
text = stringResource(R.string.onboarding_profile_button_title),
260276
onClick = { onComplete() },
@@ -272,6 +288,37 @@ private fun InviteCodeScreen(
272288
}
273289
}
274290

291+
@Composable
292+
private fun TopGradientOverlay(
293+
visible: Boolean,
294+
modifier: Modifier = Modifier,
295+
) {
296+
AnimatedVisibility(
297+
visible = visible,
298+
enter = fadeIn(),
299+
exit = fadeOut(),
300+
modifier = modifier,
301+
) {
302+
Box(
303+
modifier =
304+
Modifier
305+
.fillMaxWidth()
306+
.height(96.dp)
307+
.background(
308+
brush =
309+
Brush.verticalGradient(
310+
colors =
311+
listOf(
312+
CommonColor.White,
313+
CommonColor.White.copy(alpha = 0.6f),
314+
Color.Transparent,
315+
),
316+
),
317+
),
318+
)
319+
}
320+
}
321+
275322
@Preview(showBackground = true)
276323
@Composable
277324
private fun InviteCodeScreenPreview() {

0 commit comments

Comments
 (0)