网站规划建设与管理维护论文,外贸网站建设昆明,小吃加盟招商方案,做app和网站怎样官方页面 问题一#xff1a;设置阈值没用#xff0c;慢划超过中线才开始触发#xff0c;快划短距离就能触发20260309。 问题二#xff1a;对背景设置动画渐变#xff1a;获取进度方法提示过时#xff0c;且超过中线才开始变化。即便使用animateColorAsState()并在 Sett…官方页面问题一设置阈值没用慢划超过中线才开始触发快划短距离就能触发20260309。问题二对背景设置动画渐变获取进度方法提示过时且超过中线才开始变化。即便使用animateColorAsState()并在 Settled 时将背景色还原成白色滑动时瞬间变为目标色等于没有过渡效果。一、概念通过向左或向右滑动来触发特定动作如删除或归档列表项。SwipeToDismissBox()Composablefun SwipeToDismissBox(state: SwipeToDismissBoxState, //用于控制和管理组件的滑动状态backgroundContent: Composable RowScope.() - Unit, //滑动时显示的内容。通常会根据滑动方向显示不同的图标或颜色。modifier: Modifier Modifier,enableDismissFromStartToEnd: Boolean true, //是否开启向右滑更新enableDismissFromEndToStart: Boolean true, //是否开启向左滑删除gesturesEnabled: Boolean true,onDismiss: (SwipeToDismissBoxValue) - Unit {}, //滑动完成时的回到判断方向做相应处理。content: Composable RowScope.() - Unit, //显示在上面的内容。)内部实现是Box里面两层Row当上面一层Row被滑动移走时下面那层Row就会展示出来两层Row布局都是全部充满Box的。rememberSwipeToDismissBoxState()Composablefun rememberSwipeToDismissBoxState(initialValue: SwipeToDismissBoxValue SwipeToDismissBoxValue.Settled,//定义触发滑动完成的阈值positionalThreshold: (totalDistance: Float) - Float SwipeToDismissBoxDefaults.positionalThreshold,): SwipeToDismissBoxState根据滑动状态可以定义滑动之后的操作。二、使用Composable fun SwipeItemDemo( onDelete: () - Unit, onUpdate: () - Unit ) { val scope rememberCoroutineScope() //创建状态设置阈值 val swipeToDismissBoxState rememberSwipeToDismissBoxState { distance - distance * 0.25F //滑动超过25%即触发(或 distance/4) } SwipeToDismissBox( modifier Modifier.fillMaxWidth().height(50.dp), state swipeToDismissBoxState, onDismiss { dismissDirection - when (dismissDirection) { SwipeToDismissBoxValue.StartToEnd - { onUpdate() } //右滑更新 SwipeToDismissBoxValue.EndToStart - { onDelete() } //左滑删除 SwipeToDismissBoxValue.Settled - {} } scope.launch { swipeToDismissBoxState.reset() } //重置回默认位置 }, //背景内容 backgroundContent { BackgroundContent(swipeToDismissBoxState) }, //前景内容 content { ForegroundContent(滑动条目) } ) } Composable fun BackgroundContent(swipeToDismissBoxState: SwipeToDismissBoxState) { val direction swipeToDismissBoxState.dismissDirection val progress swipeToDismissBoxState.progress //根据滑动方向动态设置背景颜色、内容偏移、图标 var icon Icons.Default.PhotoSizeSelectActual var contentAlignment Alignment.Center var backgroundColorAnimation lerp(Color.Transparent, Color.Transparent, progress) when (direction) { SwipeToDismissBoxValue.StartToEnd - { //右滑更新 icon Icons.Filled.CheckBoxOutlineBlank contentAlignment Alignment.CenterStart backgroundColorAnimation lerp(Color.White, Color.Blue, progress) } SwipeToDismissBoxValue.EndToStart - { //左滑删除 icon Icons.Filled.Delete contentAlignment Alignment.CenterEnd backgroundColorAnimation lerp(Color.White, Color.Red, progress) } SwipeToDismissBoxValue.Settled - {} //未滑动 } if (direction ! SwipeToDismissBoxValue.Settled) { Box( modifier Modifier .fillMaxSize() .background(backgroundColorAnimation), contentAlignment contentAlignment ) { Icon( modifier Modifier.size(30.dp), imageVector icon, contentDescription null, tint Color.White ) } } } Composable fun ForegroundContent(text: String) { Box( modifier Modifier.fillMaxSize().background(Color.Green), contentAlignment Alignment.CenterStart ) { Text(text) } }