Skip to content

Commit 6d44247

Browse files
committed
Add Carousel
1 parent eb6b518 commit 6d44247

File tree

1 file changed

+110
-0
lines changed
  • compose/snippets/src/main/java/com/example/compose/snippets/components

1 file changed

+110
-0
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package com.example.compose.snippets.components
2+
3+
import androidx.annotation.DrawableRes
4+
import androidx.compose.foundation.Image
5+
import androidx.compose.foundation.layout.PaddingValues
6+
import androidx.compose.foundation.layout.fillMaxWidth
7+
import androidx.compose.foundation.layout.height
8+
import androidx.compose.foundation.layout.padding
9+
import androidx.compose.foundation.layout.wrapContentHeight
10+
import androidx.compose.material3.ExperimentalMaterial3Api
11+
import androidx.compose.material3.MaterialTheme
12+
import androidx.compose.material3.carousel.HorizontalMultiBrowseCarousel
13+
import androidx.compose.material3.carousel.HorizontalUncontainedCarousel
14+
import androidx.compose.material3.carousel.rememberCarouselState
15+
import androidx.compose.runtime.Composable
16+
import androidx.compose.runtime.remember
17+
import androidx.compose.ui.Modifier
18+
import androidx.compose.ui.layout.ContentScale
19+
import androidx.compose.ui.res.painterResource
20+
import androidx.compose.ui.tooling.preview.Preview
21+
import androidx.compose.ui.unit.dp
22+
import com.example.compose.snippets.R
23+
24+
@OptIn(ExperimentalMaterial3Api::class)
25+
@Preview
26+
// [START android_compose_carousel_multi_browse_basic]
27+
@Composable
28+
private fun CarouselExamples_MultiBrowse() {
29+
data class CarouselItem(
30+
val id: Int,
31+
@DrawableRes val imageResId: Int,
32+
val contentDescription: String
33+
)
34+
35+
val items = remember {
36+
listOf(
37+
CarouselItem(0, R.drawable.cupcake, "cupcake"),
38+
CarouselItem(1, R.drawable.donut, "donut"),
39+
CarouselItem(2, R.drawable.eclair, "eclair"),
40+
CarouselItem(3, R.drawable.froyo, "froyo"),
41+
CarouselItem(4, R.drawable.gingerbread, "gingerbread"),
42+
)
43+
}
44+
45+
HorizontalMultiBrowseCarousel(
46+
state = rememberCarouselState { items.count() },
47+
modifier = Modifier
48+
.fillMaxWidth()
49+
.wrapContentHeight()
50+
.padding(top = 16.dp, bottom = 16.dp),
51+
preferredItemWidth = 186.dp,
52+
itemSpacing = 8.dp,
53+
contentPadding = PaddingValues(horizontal = 16.dp)
54+
) { i ->
55+
val item = items[i]
56+
Image(
57+
modifier = Modifier
58+
.height(205.dp)
59+
.maskClip(MaterialTheme.shapes.extraLarge),
60+
painter = painterResource(id = item.imageResId),
61+
contentDescription = item.contentDescription,
62+
contentScale = ContentScale.Crop
63+
)
64+
}
65+
}
66+
// [END android_compose_carousel_multi_browse_basic]
67+
68+
@OptIn(ExperimentalMaterial3Api::class)
69+
@Preview
70+
// [START android_compose_carousel_uncontained_basic]
71+
@Composable
72+
private fun CarouselExamples() {
73+
data class CarouselItem(
74+
val id: Int,
75+
@DrawableRes val imageResId: Int,
76+
val contentDescription: String
77+
)
78+
79+
val items = remember {
80+
listOf(
81+
CarouselItem(0, R.drawable.cupcake, "cupcake"),
82+
CarouselItem(1, R.drawable.donut, "donut"),
83+
CarouselItem(2, R.drawable.eclair, "eclair"),
84+
CarouselItem(3, R.drawable.froyo, "froyo"),
85+
CarouselItem(4, R.drawable.gingerbread, "gingerbread"),
86+
)
87+
}
88+
89+
HorizontalUncontainedCarousel(
90+
state = rememberCarouselState { items.count() },
91+
modifier = Modifier
92+
.fillMaxWidth()
93+
.wrapContentHeight()
94+
.padding(top = 16.dp, bottom = 16.dp),
95+
itemWidth = 186.dp,
96+
itemSpacing = 8.dp,
97+
contentPadding = PaddingValues(horizontal = 16.dp)
98+
) { i ->
99+
val item = items[i]
100+
Image(
101+
modifier = Modifier
102+
.height(205.dp)
103+
.maskClip(MaterialTheme.shapes.extraLarge),
104+
painter = painterResource(id = item.imageResId),
105+
contentDescription = item.contentDescription,
106+
contentScale = ContentScale.Crop
107+
)
108+
}
109+
}
110+
// [END android_compose_carousel_uncontained_basic]

0 commit comments

Comments
 (0)