当前位置: 首页 > ds >正文

Compose笔记(四十九)--SwipeToDismiss

           这一节主要了解一下Compose中的SwipeToDismiss,在Jetpack Compose开发中,SwipeToDismiss 是用于实现滑动删除的核心组件,适用于检测水平滑动手势并触发相应的动画和操作。简单总结:

API
1 DismissState:管理滑动状态的核心类,通过rememberDismissState()创建,包含:
dismissDirection:当前滑动方向
progress:滑动进度
isDismissed(DismissDirection):判断是否已完全滑出
performDrag(delta: Float):内部用于处理滑动距离的方法
2 DismissDirection:枚举类,定义允许的滑动方向:
StartToEnd:从左向右滑动(右滑)
EndToStart:从右向左滑动(左滑)
3 DismissValue:枚举类,表示滑动结束后的状态:
DismissedToStart:完全滑向起始方向(左滑结束)
DismissedToEnd:完全滑向结束方向(右滑结束)
Default:未滑动或滑动未达到阈值
4 ThresholdConfig:定义触发操作的阈值配置:
FractionalThreshold(fraction):按滑动距离比例
FixedThreshold(pixels):按固定像素值触发

使用场景:
1 列表项左滑删除
2 滑动显示操作按钮
3 卡片类组件的滑动交互

栗子:gradle添加依赖:

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.DismissDirection
import androidx.compose.material.DismissValue
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.SwipeToDismiss
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.rememberDismissState
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterialApi::class)
@Composable
fun SwipeToDeleteDemo() {var items by remember {mutableStateOf(List(20) { "列表项 ${it + 1}" })}val listState = rememberLazyListState()LazyColumn(state = listState) {items(items, key = { it }) { item ->val dismissState = rememberDismissState(confirmStateChange = { dismissValue ->if (dismissValue == DismissValue.DismissedToStart) {items = items.filter { it != item }true} else {false}})SwipeToDismiss(state = dismissState,background = {Box(modifier = Modifier.fillMaxSize().background(Color.Red).padding(16.dp),contentAlignment = Alignment.CenterEnd) {Icon(imageVector = Icons.Default.Delete,contentDescription = "删除",tint = Color.White)}},dismissContent = {Box(modifier = Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface).padding(20.dp)) {Text(text = item)}},directions = setOf(DismissDirection.EndToStart))}}
}

注意事项
1 明确限制滑动方向,通过directions参数指定允许的滑动方向,避免无意义的双向滑动;
2 处理状态变化的确认逻辑,confirmStateChange回调用于确认是否允许状态变化,返回true表示允许;
3 避免嵌套滑动冲突,若滑动项内部包含可滑动组件,需通过nestedScroll处理滑动冲突,或禁用内部滑动;

http://www.xdnf.cn/news/20458.html

相关文章:

  • RabbitMQ工作模式(下)
  • 贪心算法应用:蛋白质折叠问题详解
  • Eureka与Nacos的区别-服务注册+配置管理
  • AI模型测评平台工程化实战十二讲(第一讲:从手工测试到系统化的觉醒)
  • 力扣29. 两数相除题解
  • Qt资源系统学习
  • 【继承和派生】
  • 【Flask】测试平台开发,重构提测管理页面-第二十篇
  • 把装配想象成移动物体的问题
  • java基础学习(五):对象中的封装、继承和多态
  • C++经典的数据结构与算法之经典算法思想:排序算法
  • phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(windows CVE-2014-8959)
  • 吴恩达机器学习(七)
  • 综合安防集成系统解决方案,智慧园区,智慧小区安防方案(300页Word方案)
  • 《2025国赛/高教杯》C题 完整实战教程(代码+公式详解)
  • 关于连接池
  • 【PostgreSQL】如何实现主从复制?
  • 网络原理-
  • 在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
  • Qt 基础教程合集(完)
  • 分布式数据架构
  • 硬件开发_基于物联网的老人跌倒监测报警系统
  • 数据结构——栈(Java)
  • MySQL数据库约束和设计
  • 附050.Kubernetes Karmada Helm部署联邦及使用
  • C++_哈希
  • 基于阿里云ECS搭建Tailscale DERP中继服务器:提升跨网络连接速度
  • 前端登录鉴权详解
  • C++面试10——构造函数、拷贝构造函数和赋值运算符
  • 西门子S7-200 SMART PLC:编写最基础的“起保停”程序