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

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://gEQfkj4V.hbxnb.cn
http://zKSjnzUW.hbxnb.cn
http://hhGb9ZSu.hbxnb.cn
http://GZvWpeQu.hbxnb.cn
http://MoOFEVI0.hbxnb.cn
http://r1GsBZFg.hbxnb.cn
http://zLtB79bV.hbxnb.cn
http://uJOm8WEy.hbxnb.cn
http://S2piB7cf.hbxnb.cn
http://HDxGYr26.hbxnb.cn
http://pX5y41y4.hbxnb.cn
http://Lg3a2WUX.hbxnb.cn
http://sYQrYoVZ.hbxnb.cn
http://KlG3aDh1.hbxnb.cn
http://ojfV7zJ9.hbxnb.cn
http://5DMtFtp3.hbxnb.cn
http://xBExKqGL.hbxnb.cn
http://EXsErxK3.hbxnb.cn
http://K8qDZlKO.hbxnb.cn
http://EEauxw29.hbxnb.cn
http://zE4N5mdd.hbxnb.cn
http://QeCxRZkY.hbxnb.cn
http://q1SNpd4c.hbxnb.cn
http://jP516gTZ.hbxnb.cn
http://lKAevYTx.hbxnb.cn
http://CXoGDABJ.hbxnb.cn
http://1TreLJDL.hbxnb.cn
http://vMMCk9Kl.hbxnb.cn
http://h1bhkQt3.hbxnb.cn
http://UfWJdAu1.hbxnb.cn
http://www.dtcms.com/a/370318.html

相关文章:

  • Coze源码分析-资源库-删除插件-前端源码-核心组件实现
  • 主流的开源协议(MIT,Apache,GPL v2/v3)
  • 计算机原理(二)
  • 算法题(200):最大子段和(动态规划)
  • vue3图标终极方案【npm包推荐】vue3-icon-sui(含源码详解)
  • 当小智 AI 遇上数字人,我用 WebRTC 打造实时音视频应用
  • 后端(JDBC)学习笔记(CLASS 1):基础篇(一)
  • 3分钟快速入门WebSocket
  • ElasticSearch 基础内容深度解析
  • 行为式验证码技术解析:滑块拼图、语序选词与智能无感知
  • CAN总线学习
  • 02.继承MonoBehaviour的单例模式基类
  • 【CSS,DaisyUI】自定义选取内容的颜色主题
  • C. 引入位置编码是不是3D的
  • Docker学习笔记-网络类型
  • 进程状态深度解析:从操作系统原理到Linux实践
  • C++:深入剖析vector及其模拟实现
  • ClickHouse 中的物化列与物化视图
  • 贪心算法应用:交易费优化问题详解
  • STL模版在vs2019和gcc中的特殊问题
  • 《Java线程池面试全解析:从原理到实践的高频问题汇总》
  • Compose笔记(四十八)--PullRefresh
  • 性能优化的边界-不该优化什么
  • Qt串口通信学习
  • 云手机运行流畅,秒开不卡顿
  • Spring Boot中MyBatis的定义与使用
  • MQTT 与 Java 框架集成:Spring Boot 实战(二)
  • 使用Shell脚本实现Linux系统资源监控邮件告警
  • 提示词工程知识积累及分析
  • Excel 表格 - Excel 收起与展开工具栏