@@ -8,7 +8,6 @@ import androidx.compose.foundation.shape.CircleShape
8
8
import androidx.compose.foundation.shape.RoundedCornerShape
9
9
import androidx.compose.foundation.verticalScroll
10
10
import androidx.compose.material.Card
11
- import androidx.compose.material.Icon
12
11
import androidx.compose.material.MaterialTheme
13
12
import androidx.compose.material.Text
14
13
import androidx.compose.material.icons.Icons
@@ -23,7 +22,6 @@ import androidx.compose.ui.Alignment
23
22
import androidx.compose.ui.Modifier
24
23
import androidx.compose.ui.draw.clip
25
24
import androidx.compose.ui.graphics.Color
26
- import androidx.compose.ui.graphics.vector.ImageVector
27
25
import androidx.compose.ui.layout.ContentScale
28
26
import androidx.compose.ui.res.painterResource
29
27
import androidx.compose.ui.tooling.preview.Preview
@@ -36,73 +34,18 @@ import com.guru.composecookbook.theme.typography
36
34
@Composable
37
35
fun CarouselLayout () {
38
36
Column (modifier = Modifier .verticalScroll(rememberScrollState())) {
39
- val items = remember { DemoDataProvider .itemList.take(10 ) }
37
+ val items = remember { DemoDataProvider .itemList.take(5 ) }
40
38
val pagerState: PagerState = run {
41
- remember { PagerState (2 , 0 , items.size - 1 ) }
39
+ remember { PagerState (1 , 0 , items.size - 1 ) }
42
40
}
43
41
val selectedPage = remember { mutableStateOf(2 ) }
44
42
45
- Pager (state = pagerState, modifier = Modifier .height(200 .dp)) {
46
- val item = items[page]
47
- selectedPage.value = pagerState.currentPage
48
- CarouselItem (item)
49
- }
50
- Row (modifier = Modifier .align(Alignment .CenterHorizontally )) {
51
- items.forEachIndexed { index, _ ->
52
- CarouselDot (
53
- selected = index == selectedPage.value,
54
- MaterialTheme .colors.primary,
55
- Icons .Filled .Lens
56
- )
57
- }
58
- }
59
- Spacer (modifier = Modifier .height(24 .dp))
60
- // Pager 2
61
- Pager (state = pagerState, modifier = Modifier .height(200 .dp)) {
62
- val item = items[page]
63
- selectedPage.value = pagerState.currentPage
64
- CarouselItemCircle (item)
65
- }
66
- Row (modifier = Modifier .align(Alignment .CenterHorizontally )) {
67
- items.forEachIndexed { index, _ ->
68
- CarouselDot (
69
- selected = index == selectedPage.value,
70
- MaterialTheme .colors.error,
71
- Icons .Filled .Favorite
72
- )
73
- }
74
- }
75
- Spacer (modifier = Modifier .height(24 .dp))
76
- // Pager 3
77
- Pager (state = pagerState, modifier = Modifier .height(350 .dp)) {
78
- val item = items[page]
79
- selectedPage.value = pagerState.currentPage
80
- CarouselItemCard (item, pagerState, selectedPage)
81
- }
82
- Row (modifier = Modifier .align(Alignment .CenterHorizontally )) {
83
- items.forEachIndexed { index, _ ->
84
- CarouselDot (
85
- selected = index == selectedPage.value,
86
- MaterialTheme .colors.secondary,
87
- Icons .Filled .Album
88
- )
89
- }
90
- }
43
+ PrepareFirstPager (pagerState, items, selectedPage)
44
+ PrepareSecondPager (pagerState, items, selectedPage)
45
+ PrepareThirdPager (pagerState, items, selectedPage)
91
46
}
92
47
}
93
48
94
- @Composable
95
- fun CarouselDot (selected : Boolean , color : Color , icon : ImageVector ) {
96
- Icon (
97
- imageVector = icon,
98
- modifier = Modifier
99
- .padding(4 .dp)
100
- .size(12 .dp),
101
- contentDescription = null ,
102
- tint = if (selected) color else Color .Gray
103
- )
104
- }
105
-
106
49
@Composable
107
50
fun CarouselItem (item : Item ) {
108
51
Box {
@@ -177,6 +120,78 @@ fun CarouselItemCard(item: Item, pagerState: PagerState, selectedPage: MutableSt
177
120
178
121
}
179
122
123
+ @Composable
124
+ private fun ColumnScope.PrepareFirstPager (
125
+ pagerState : PagerState ,
126
+ items : List <Item >,
127
+ selectedPage : MutableState <Int >
128
+ ) {
129
+ Pager (
130
+ state = pagerState,
131
+ modifier = Modifier .height(200 .dp)
132
+ ) {
133
+ val item = items[commingPage]
134
+ selectedPage.value = pagerState.currentPage
135
+ CarouselItem (item)
136
+ }
137
+
138
+ Row (modifier = Modifier .align(Alignment .CenterHorizontally )) {
139
+ items.forEachIndexed { index, _ ->
140
+ CarouselDot (
141
+ selected = index == selectedPage.value,
142
+ MaterialTheme .colors.primary,
143
+ Icons .Filled .Lens
144
+ )
145
+ }
146
+ }
147
+
148
+ Spacer (modifier = Modifier .height(24 .dp))
149
+ }
150
+
151
+ @Composable
152
+ private fun ColumnScope.PrepareSecondPager (
153
+ pagerState : PagerState ,
154
+ items : List <Item >,
155
+ selectedPage : MutableState <Int >
156
+ ) {
157
+ Pager (state = pagerState, modifier = Modifier .height(200 .dp)) {
158
+ val item = items[commingPage]
159
+ selectedPage.value = pagerState.currentPage
160
+ CarouselItemCircle (item)
161
+ }
162
+ Row (modifier = Modifier .align(Alignment .CenterHorizontally )) {
163
+ items.forEachIndexed { index, _ ->
164
+ CarouselDot (
165
+ selected = index == selectedPage.value,
166
+ MaterialTheme .colors.error,
167
+ Icons .Filled .Favorite
168
+ )
169
+ }
170
+ }
171
+ Spacer (modifier = Modifier .height(24 .dp))
172
+ }
173
+
174
+ @Composable
175
+ private fun ColumnScope.PrepareThirdPager (
176
+ pagerState : PagerState ,
177
+ items : List <Item >,
178
+ selectedPage : MutableState <Int >
179
+ ) {
180
+ Pager (state = pagerState, modifier = Modifier .height(350 .dp)) {
181
+ val item = items[commingPage]
182
+ selectedPage.value = pagerState.currentPage
183
+ CarouselItemCard (item, pagerState, selectedPage)
184
+ }
185
+ Row (modifier = Modifier .align(Alignment .CenterHorizontally )) {
186
+ items.forEachIndexed { index, _ ->
187
+ CarouselDot (
188
+ selected = index == selectedPage.value,
189
+ MaterialTheme .colors.secondary,
190
+ Icons .Filled .Album
191
+ )
192
+ }
193
+ }
194
+ }
180
195
181
196
@Preview
182
197
@Composable
0 commit comments