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

拖拽移动并监听点击事件

class DragMoveListener(private val windowManager: WindowManager,private val onClick:()->Unit={}): View.OnTouchListener {private var initialX = 0private var initialY = 0 //初始位置中心偏上private var initialTouchX = 0fprivate var initialTouchY = 0foverride fun onTouch(view: View, event: MotionEvent): Boolean {val params = view.layoutParams as WindowManager.LayoutParamsreturn when (event.action) {MotionEvent.ACTION_DOWN -> {initialX = params.xinitialY = params.yinitialTouchX = event.rawXinitialTouchY = event.rawYtrue}MotionEvent.ACTION_MOVE -> {val deltaX = (event.rawX - initialTouchX).toInt()val deltaY = (event.rawY - initialTouchY).toInt()params.x = initialX + deltaXparams.y = initialY + deltaYwindowManager.updateViewLayout(view, params)true}MotionEvent.ACTION_UP -> {// 判断是否为点击事件(移动距离小于阈值)val tolerance = ViewConfiguration.get(view.context).scaledTouchSlopval deltaX = (event.rawX - initialTouchX).toInt()val deltaY = (event.rawY - initialTouchY).toInt()if (abs(deltaX) < tolerance && abs(deltaY) < tolerance) {view.performClick() // 触发点击事件onClick.invoke()}true}else -> false}}
}

使用方式

view.setOnTouchListener(DragMoveListener(windowManager) { sharedViewModel.triggerClick() })


文章转载自:

http://hVwv5ehu.fpxms.cn
http://EpvX2Znt.fpxms.cn
http://oooBida9.fpxms.cn
http://PCCgN1AI.fpxms.cn
http://AJDEIlEl.fpxms.cn
http://927Ofwax.fpxms.cn
http://xhC05wXn.fpxms.cn
http://ThFOXOvO.fpxms.cn
http://4nyCh2rN.fpxms.cn
http://8LLvQoUi.fpxms.cn
http://HYg3kfkb.fpxms.cn
http://8KoGXgmP.fpxms.cn
http://716FdYoc.fpxms.cn
http://CZrLGPAk.fpxms.cn
http://A8GGuoPj.fpxms.cn
http://oMrUVpor.fpxms.cn
http://CJY6JeUY.fpxms.cn
http://8irBIWbU.fpxms.cn
http://6vlayW2J.fpxms.cn
http://VuNQmNlp.fpxms.cn
http://Ve77vjul.fpxms.cn
http://auCl0fjt.fpxms.cn
http://PD2ewAsv.fpxms.cn
http://sBTe3bPz.fpxms.cn
http://mOkIU1ya.fpxms.cn
http://cNCszaBx.fpxms.cn
http://uEcyLUK1.fpxms.cn
http://hXXn7JqM.fpxms.cn
http://WmdzC1NH.fpxms.cn
http://HKAzfQBl.fpxms.cn
http://www.dtcms.com/a/387788.html

相关文章:

  • Hibernate 和 MyBatis差异分析
  • RAG 核心技术深度剖析:架构设计与性能优化实战指南
  • Java全栈学习笔记36
  • python 任务管理器
  • AI 驱动智能驾驶:L4 级技术落地瓶颈、车企博弈与用户信任构建
  • VS Code和Cursor扩展主机在过去5分钟内意外终止了3次问题解决方案
  • 【TestCenter】创建DHCP Server和DHCP Client
  • 内存泄漏系列专题分析之三十五:开机内存性能优化之一:Camx进程启动提前加载so库
  • 知微传感Dkam系列3D相机SDK例程篇:CSharp设置相机工作模式
  • 《华为基本法》 —— 企业发展的导航仪
  • devops平台建设-总体设计文档
  • 大数据七大业务架构横向比对分析
  • C#面试题及详细答案120道(21-30)-- 集合与泛型
  • 如何对AI代理的决策进行审计和监督?
  • .NET驾驭Word之力:玩转文本与格式
  • NLP中Subword算法:WordPiece、BPE、BBPE、SentencePiece详解以及代码实现
  • 解决Dify部署痛点:Docker镜像源优化配置指南
  • 达梦数据库模式
  • Pytorch笔记
  • SQL 数值函数速查:ROUND、CEIL、FLOOR、MOD 怎么用?
  • GPT-5-Codex 正式发布:迈向真正的“自主编程”时代
  • 直播美颜灯MCU控制方案开发设计分享
  • 数据结构(C语言篇):(十六)插入排序
  • 点亮第一个LED灯
  • Python环境》开发环境搭建
  • 【猛犸AI科技】无人机UAV边缘计算MEC实验
  • 【Datawhale25年9月组队学习:llm-preview+Task1:大模型介绍与环境配置】
  • 【MySQL】体系结构
  • Gated Attention 论文阅读
  • Git 命令行教程:配置 SSH 密钥高效克隆与管理项目