前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

官方支持Compose轮播图组件啦~(轮播图bootstrap)

qiguaw 2024-08-29 11:21:46 资源文章 72 ℃ 0 评论


英伟达仍计划在2024年下半年推出B100及B200,供应CSPs(云端服务业者)客户,并规划于2024年第三季后陆续供货。在CoWoS-L良率和量产尚待整备的情况下,英伟达同步规划降规版B200A给其他企业客户,并转为采用CoWoS-S封装技术。B200A的存储器规格将采用4颗HBM3e(第五代高带宽内存)12hi(12层堆叠),总容量为144GB。预期OEMs(原始设备制造商)应会于2025年上半年正式拿到B200A芯片。到2025年Blackwell平台将占英伟达高端GPU逾八成,并促使英伟达高端GPU系列的出货年增率上升至55%。


/? ?作者简介? ?/


本篇文章转自 黄林晴 的博客,文章主要分享了 如何使用Compose轮播图组件 ,相信会对大家有所帮助!


原文 地址:

https://mp.weixin.qq.com/s/va6RWDoFRC8Vl67K4v44jg


/? ?前言? ?/


在此之前如果我们想要在Compose中实现轮播图的效果,一般需要借助HorizontalPager来实现,需要自己额外处理定时刷新的逻辑。在m3中官方为我们提供了标准的轮播图Carousel组件,现在Carousel也支持Compose了,借助Carousel可以轻松在Compose中实现轮播图的效果。


/ Carousel 分类? ?/


在原生View系统中,Carousel为我们提供了四种布局,分别为:


  • Multi-browse

  • Uncontained

  • Hero

  • Full-screen


提供了两种滚动方式:


  • Default: 默认值: 标准滚动。

  • Snap-scrolling: 对齐滚动: 滚动条对齐Carousel的布局。推荐用于多浏览



而在Compose中提供了HorizontalMultiBrowseCarousel、HorizontalUncontainedCarousel 两个方法。今天我们只来了解如何在Compose中使用Carousel组件。


/? ?使用方法? ?/


准备工作


新建Compose项目,将m3升级到最新版本,因为部分API仍处于实验性阶段。


??????implementation("androidx.compose.material3:material3:1.3.0-beta05")


准备好要展示的图片,代码如下所示:


????data?class?CarouselItem(
????val?id:?Int,
????@DrawableRes?val?imageResId:?Int,
????@StringRes?val?contentDescriptionResId:?Int
)

val?items?=?listOf(
????????CarouselItem(0,?R.drawable.carousel_image_1,?R.string.carousel_image_1_description),
????????CarouselItem(1,?R.drawable.carousel_image_2,?R.string.carousel_image_2_description),
????????CarouselItem(2,?R.drawable.carousel_image_3,?R.string.carousel_image_3_description),
????????CarouselItem(3,?R.drawable.carousel_image_4,?R.string.carousel_image_4_description)
????)


HorizontalMultiBrowseCarousel


HorizontalMultiBrowseCarousel的参数如下所示。


???@ExperimentalMaterial3Api
@Composable
fun?HorizontalMultiBrowseCarousel(
????state:?CarouselState,
????preferredItemWidth:?Dp,
????modifier:?Modifier?=?Modifier,
????itemSpacing:?Dp?=?0.dp,
????flingBehavior:?TargetedFlingBehavior?=?CarouselDefaults.singleAdvanceFlingBehavior(state?=?state)
,
????minSmallItemWidth:?Dp?=?CarouselDefaults.MinSmallItemSize,
????maxSmallItemWidth:?Dp?=?CarouselDefaults.MaxSmallItemSize,
????contentPadding:?PaddingValues?=?PaddingValues(0.dp),
????content:?@Composable?CarouselItemScope.(itemIndex:?Int)?->?Unit
):?Unit


主要参数含义如下:



接下来我们实现HorizontalMultiBroseCarousel方法,代码如下所示:


???@ExperimentalMaterial3Api
@Composable
fun?Carouse(){
????HorizontalMultiBrowseCarousel(
????????state?=?rememberCarouselState?{?items.count()?},
????????modifier?=?Modifier.width(412.dp).height(221.dp),
????????preferredItemWidth?=?186.dp,
????????itemSpacing?=?8.dp,
????????contentPadding?=?PaddingValues(horizontal?=?16.dp)
????)?{?i?->
????????val?item?=?items[i]
????????Image(
????????????modifier?=?Modifier.height(205.dp).maskClip(MaterialTheme.shapes.extraLarge),
????????????painter?=?painterResource(id?=?item.imageResId),
????????????contentDescription?=?stringResource(item.contentDescriptionResId),
????????????contentScale?=?ContentScale.Crop
????????)
????}
}


运行程序,结果如下图所示。



这里需要注意,如果我们将preferredItemWidth改为0dp,即使给Image设置宽度自适应 也是无法生效的。


HorizontalUncontainedCarousel


HorizontalUncontainedCarousel的参数如下所示。


??@ExperimentalMaterial3Api
@Composable
fun?HorizontalUncontainedCarousel(
????state:?CarouselState,
????itemWidth:?Dp,
????modifier:?Modifier?=?Modifier,
????itemSpacing:?Dp?=?0.dp,
????flingBehavior:?TargetedFlingBehavior?=?CarouselDefaults.noSnapFlingBehavior()
,
????contentPadding:?PaddingValues?=?PaddingValues(0.dp),
????content:?@Composable?CarouselItemScope.(itemIndex:?Int)?->?Unit
)


与HorizontalMultiBrowseCarousel不同的是preferredItemWidth变成了itemWidth参数。


实现代码,如下所示:


HorizontalUncontainedCarousel(
????state?=?rememberCarouselState?{?items.count()?},
????modifier?=?Modifier.width(412.dp).height(221.dp),
????itemWidth?=?186.dp,
????itemSpacing?=?8.dp,
????contentPadding?=?PaddingValues(horizontal?=?16.dp)
)?{?i?->????val?item?=?items[i]
????Image(
????????modifier?=?Modifier.height(205.dp).maskClip(MaterialTheme.shapes.extraLarge),
????????painter?=?painterResource(id?=?item.imageResId),
????????contentDescription?=?stringResource(item.contentDescriptionResId),
????????contentScale?=?ContentScale.Crop
????)}


运行程序,结果如下图所示。



乍一看效果好像与HorizontalUncontainedCarousel没有什么区别,但是仔细一看,好像也没什么区别。


这里的itemWidth相当于指定了滚动项的固定宽度,但实际不会超过屏幕宽度。而preferredItemWidth是期望的宽度,Carouse会根据实际情况进行动态调整。


rememberCarouselState


在上述两个方法中都有一个rememberCarouselState,它的使用方法也很简单,除了itemCount参数之外还有一个initialItem参数,用于指定初始卡片的位置。用法如下所示。


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表