MultiAspectCarouselScope
Functions summary
Unit |
@ComposableCreates a multi-apsect carousel scope that includes all related methods for creating a multi-aspect carousel. |
Cmn
|
Functions
MultiAspectCarouselScope
@Composable
fun MultiAspectCarouselScope(content: @Composable MultiAspectCarouselScope.() -> Unit): Unit
Creates a multi-apsect carousel scope that includes all related methods for creating a multi-aspect carousel.
Note: MultiAspectCarouselScope does not introduce a new androidx.compose.ui.layout.Layout to the content passed in. All the androidx.compose.ui.layout.Layouts in the content will have the same parent as they would without MultiAspectCarouselScope.
import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.filled.Image import androidx.compose.material3.MaterialTheme import androidx.compose.material3.carousel.MultiAspectCarouselItemDrawInfo import androidx.compose.material3.carousel.MultiAspectCarouselScope import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Size import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp data class CarouselItem( val id: Int, @DrawableRes val imageResId: Int, @StringRes val contentDescriptionResId: Int, val mainAxisSize: Dp, ) val items = listOf( CarouselItem( 0, R.drawable.carousel_image_1, R.string.carousel_image_1_description, 305.dp, ), CarouselItem( 1, R.drawable.carousel_image_2, R.string.carousel_image_2_description, 205.dp, ), CarouselItem( 2, R.drawable.carousel_image_3, R.string.carousel_image_3_description, 275.dp, ), CarouselItem( 3, R.drawable.carousel_image_4, R.string.carousel_image_4_description, 350.dp, ), CarouselItem( 4, R.drawable.carousel_image_5, R.string.carousel_image_5_description, 100.dp, ), ) MultiAspectCarouselScope { val state = rememberLazyListState() LazyRow( state = state, contentPadding = PaddingValues(16.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), modifier = Modifier.fillMaxWidth().height(221.dp), ) { itemsIndexed(items) { i, item -> val drawInfo = remember { MultiAspectCarouselItemDrawInfo(i, state) } Image( painter = painterResource(id = item.imageResId), contentDescription = stringResource(item.contentDescriptionResId), modifier = Modifier.width(item.mainAxisSize) .height(205.dp) .maskClip(MaterialTheme.shapes.extraLarge, drawInfo), contentScale = ContentScale.Crop, ) } } }