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

【Android-Compose】手势检测实现按下、单击、双击、长按事件,以及避免频繁单击事件的简单方法

目录:

  • 1 `不需要`双击事件 + `规避`频繁单击事件
  • 2 需要双击事件(常规写法)
  • 3 后记:不建议使用上面的代码自定义按钮

1 不需要双击事件 + 规避频繁单击事件

var firstClickTime by remember { mutableStateOf(System.currentTimeMillis()) }
Icon(Icons.Default.Settings,contentDescription = "Localized description",//tint = settingTextColor,// 图标颜色modifier = Modifier.pointerInput(this) {// 手势输入处理detectTapGestures(// 检测点击类型的手势onDoubleTap = null,onTap = {// 当不需要使用双击事件的时候,应该避免频繁点击单击按钮,// 此时,需要先将双击事件的代码onDoubleTap = {...} 全都注释或者设置为null// 如果要触发单击事件的时间 减去 本次第一次按下的时间 大于 800ms,则才认为是合理的单击事件// 避免急速点击时,触发多次单击事件if (System.currentTimeMillis() - firstClickTime > 800) {// 实现单击事件:Toast.makeText(context, "合理单击", Toast.LENGTH_SHORT).show()}},onPress = {this.awaitRelease() // 等待手指抬起// 本次按下的第一时间:firstClickTime = System.currentTimeMillis()//Toast.makeText(context, "每次按下都优先触发", Toast.LENGTH_SHORT).show()},onLongPress = {Toast.makeText(context, "长按", Toast.LENGTH_SHORT).show()})}
)

2 需要双击事件(常规写法)

Icon(Icons.Default.Settings,contentDescription = "Localized description",//tint = settingTextColor,// 图标颜色modifier = Modifier.pointerInput(this) {// 手势输入处理detectTapGestures(// 检测点击类型的手势onDoubleTap = {Toast.makeText(context, "双击", Toast.LENGTH_SHORT).show()},onTap = {Toast.makeText(context, "单击", Toast.LENGTH_SHORT).show()},onPress = {Toast.makeText(context, "每次按下都优先触发", Toast.LENGTH_SHORT).show()},onLongPress = {Toast.makeText(context, "长按", Toast.LENGTH_SHORT).show()})}
)

3 后记:不建议使用上面的代码自定义按钮

上面的代码,在最新的 M3 中,点击按钮不会带有涟漪小动画,可以尝试使用以下:

modifier = Modifier.padding(PaddingValues(bottom = 2.dp)).combinedClickable(onClick = {onTap()// 自定义单击事件},onLongClick = {onLongPress()// 自定义长按事件},onLongClickLabel = stringResource(R.string.app_name))

相关文章:

  • 详解计算机软件基本概念
  • VPS与云计算有什么区别?
  • 图数据库neo4j入门
  • 备战蓝桥杯---搜索(完结篇)
  • java 回答问题
  • Blender教程(基础)-顶点的移动、滑移-16
  • go-基于逃逸分析来提升性能程序
  • Java基础常见面试题总结-集合(二)
  • 6. 尚硅谷大数据111门技术+42个项目
  • 测试:JMeter如何获取非json格式的响应参数
  • flink写入es的参数解析
  • MongoDB聚合: $sortByCount
  • Adobe Camera Raw for Mac v16.1.0中文激活版
  • 【蓝桥杯单片机记录】IO基础与LED控制
  • 手动汉化unity编辑器,解决下载中文语言报错问题
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Angular4 模板式表单用法以及验证
  • CSS实用技巧干货
  • Javascript设计模式学习之Observer(观察者)模式
  • pdf文件如何在线转换为jpg图片
  • python学习笔记 - ThreadLocal
  • 搭建gitbook 和 访问权限认证
  • 猴子数据域名防封接口降低小说被封的风险
  • 码农张的Bug人生 - 初来乍到
  • 思维导图—你不知道的JavaScript中卷
  • 通过git安装npm私有模块
  • 微信小程序实战练习(仿五洲到家微信版)
  • 优秀架构师必须掌握的架构思维
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 如何在招聘中考核.NET架构师
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​一些不规范的GTID使用场景
  • (BFS)hdoj2377-Bus Pass
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (WSI分类)WSI分类文献小综述 2024
  • (ZT)薛涌:谈贫说富
  • (ZT)一个美国文科博士的YardLife
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)一些感悟
  • (转载)hibernate缓存
  • .NET Core 2.1路线图
  • .NET Core 版本不支持的问题
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET 设计一套高性能的弱事件机制
  • .Net 中Partitioner static与dynamic的性能对比
  • .Net6使用WebSocket与前端进行通信
  • .NET多线程执行函数
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • //解决validator验证插件多个name相同只验证第一的问题
  • /proc/vmstat 详解
  • [acm算法学习] 后缀数组SA
  • [Android] Android ActivityManager