@@ -2,26 +2,35 @@ package st.slex.csplashscreen.ui.main
22
33import android.annotation.SuppressLint
44import androidx.compose.foundation.Image
5- import androidx.compose.foundation.clickable
6- import androidx.compose.foundation.layout.fillMaxWidth
7- import androidx.compose.foundation.layout.height
8- import androidx.compose.foundation.layout.padding
5+ import androidx.compose.foundation.layout.*
96import androidx.compose.foundation.lazy.LazyColumn
7+ import androidx.compose.material.Card
8+ import androidx.compose.material.ExperimentalMaterialApi
109import androidx.compose.runtime.Composable
1110import androidx.compose.runtime.rememberCoroutineScope
1211import androidx.compose.ui.Modifier
1312import androidx.compose.ui.draw.clipToBounds
13+ import androidx.compose.ui.draw.shadow
14+ import androidx.compose.ui.graphics.graphicsLayer
1415import androidx.compose.ui.unit.dp
1516import androidx.navigation.NavController
17+ import androidx.paging.compose.LazyPagingItems
1618import androidx.paging.compose.collectAsLazyPagingItems
1719import androidx.paging.compose.items
1820import coil.annotation.ExperimentalCoilApi
1921import coil.compose.rememberImagePainter
2022import coil.transform.RoundedCornersTransformation
23+ import com.google.accompanist.pager.ExperimentalPagerApi
24+ import com.google.accompanist.pager.HorizontalPager
25+ import com.google.accompanist.pager.calculateCurrentOffsetForPage
26+ import com.google.android.material.animation.AnimationUtils.lerp
2127import kotlinx.coroutines.ExperimentalCoroutinesApi
2228import kotlinx.coroutines.launch
29+ import st.slex.csplashscreen.data.model.ui.image.ImageModel
2330import st.slex.csplashscreen.utiles.GET_PHOTOS
2431
32+ @ExperimentalMaterialApi
33+ @ExperimentalPagerApi
2534@ExperimentalCoilApi
2635@SuppressLint(" CoroutineCreationDuringComposition" )
2736@ExperimentalCoroutinesApi
@@ -34,25 +43,63 @@ fun MainScreen(navController: NavController, viewModel: PhotosViewModel) {
3443 }
3544
3645 val lazyPagingItems = viewModel.photos.collectAsLazyPagingItems()
37- LazyColumn {
38- items(lazyPagingItems) {
39- Image (
40- painter = rememberImagePainter(
41- data = it?.urls?.regular.toString(),
42- builder = {
43- transformations(RoundedCornersTransformation (32F ))
44- }
45- ),
46- contentDescription = null ,
47- modifier = Modifier
48- .fillMaxWidth()
49- .height(300 .dp)
50- .clipToBounds()
51- .padding(8 .dp)
52- .clickable {
53- navController.navigate(" detail" )
54- }
55- )
46+ Pager (lazyPagingItems, navController)
47+ }
48+
49+ @SuppressLint(" RestrictedApi" )
50+ @ExperimentalMaterialApi
51+ @ExperimentalPagerApi
52+ @ExperimentalCoilApi
53+ @Composable
54+ fun Pager (lazyPagingItems : LazyPagingItems <ImageModel >, navController : NavController ) {
55+ HorizontalPager (
56+ count = 4 ,
57+ contentPadding = PaddingValues (),
58+ ) { page ->
59+ LazyColumn {
60+ items(lazyPagingItems) {
61+ Card (
62+ modifier = Modifier
63+ .padding(16 .dp)
64+ .graphicsLayer {
65+ val pageOffset = calculateCurrentOffsetForPage(page)
66+ lerp(
67+ 0.85f ,
68+ 1f ,
69+ 1f - pageOffset.coerceIn(0f , 1f )
70+ ).also { scale ->
71+ scaleX = scale
72+ scaleY = scale
73+ }
74+ // We animate the alpha, between 50% and 100%
75+ alpha = lerp(
76+ 0.5f ,
77+ 1f ,
78+ 1f - pageOffset.coerceIn(0f , 1f )
79+ )
80+ }
81+ .aspectRatio(1f )
82+ .shadow(elevation = 8 .dp, clip = true ),
83+ onClick = { navController.navigate(" detail" ) }
84+ ) {
85+ Image (
86+ painter = rememberImagePainter(
87+ data = it?.urls?.regular.toString(),
88+ builder = {
89+ transformations(RoundedCornersTransformation ())
90+ allowHardware(false )
91+ crossfade(500 )
92+ }
93+ ),
94+ contentDescription = null ,
95+ modifier = Modifier
96+ .fillMaxWidth()
97+ .height(300 .dp)
98+ .clipToBounds()
99+ )
100+ }
101+
102+ }
56103 }
57104 }
58105}
0 commit comments