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

Android日常——记一次Android事件分发需求的实现

背景:在一个事件分发复杂的view中,插入一个可点击的控件,且不能影响到本身的事件分发。

尝试:
1.对view本身设置点击事件;由于view整体是交由root view去处理分发,存在滑动、边界处理、调出其他界面等复杂操作。设置点击事件后,root view在该区域无法处理事件,fail。
2.覆写view的onTouchEvent;当返回true时,消费了事件,rootView无法处理,且无法将事件交还,不符合需求;当返回false时,因为整体事件分发复杂,会由其他控件消耗,后续事件无法获取,fail。
3.由于所有事件的分发顺序判断在rootView中,在rootView在处理时将事件传一份给当前view;当前view不参与事件分发的流程,只通过事件判断自己是否应该响应点击事件,pass。

实现:在onTouchEvent中插桩,执行该方法;插桩使用了单例的Controller,回调给对应的view

    // gap,用于判断当前是否可以被认为是一个点击事件private static final float TOUCH_GAP = 50f;// 起始xyprivate float mStartX, mStartY;// 标识位,是否可以执行click事件private boolean mShouldPerformClick;public void handleTouchEvent(MotionEvent event) {if (event == null) return;int action = event.getAction();switch (action) {case MotionEvent.ACTION_DOWN:// down事件,初始化点击位置;如果点击事件在点击区间内,重置flagmStartX = event.getRawX();mStartY = event.getRawY();if (isInArea(mStartX, mStartY)) {mShouldPerformClick = true;}break;case MotionEvent.ACTION_MOVE:// 判断当前距离是否大于gapfloat currentX = event.getRawX();float currentY = event.getRawY();if (mShouldPerformClick && (Math.abs(currentX - mStartX) > TOUCH_GAP|| Math.abs(currentY - mStartY) > TOUCH_GAP)) {mShouldPerformClick = false;}break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:// 根据上面的判断,执行点击事件if (mShouldPerformClick) {yourOwnClickEvent();}mShouldPerformClick = false;break;default:break;}}// 判断是否down的位置在view上(此处通过rect去标识,自定义了点击区间)private boolean isInArea(float startX, float startY) {if (mRect.right <= 0) {mContent.getGlobalVisibleRect(mRect);}return startX >= mRect.left && startX <= mRect.right && startY >= mRect.top && startY <= mRect.bottom;}

相关文章:

Android日常——记一次Android事件分发需求的实现

背景&#xff1a;在一个事件分发复杂的view中&#xff0c;插入一个可点击的控件&#xff0c;且不能影响到本身的事件分发。 尝试: 1.对view本身设置点击事件&#xff1b;由于view整体是交由root view去处理分发&#xff0c;存在滑动、边界处理、调出其他界面等复杂操作。设置点…...

【Python】函数(function)和方法(method)的区别

这里先说结论&#xff0c;为了满足心急的小伙伴&#xff1a;method与function的最大区别就是参数有无进行绑定。 自定义类Test&#xff1a; 首先先来一个自定义类&#xff1a; class Test:def Func_normal(arg):print(Func_normal:,arg)staticmethoddef Func_static(arg):pri…...

linux入门---信号的理解

目录标题 如何理解计算机中的信号如何查看计算机中的信号初步了解信号的保存和发送如何向目标进程发送信号情景一&#xff1a;使用键盘发送信号情景二&#xff1a;系统调用发送信号情景三&#xff1a;硬件异常产生信号情景四&#xff1a;软件条件产生信号 核心转储信号的两个问…...

nn.Linear(d, num_units, bias=True)设置bias和不设置bias有什么区别?

nn.Linear(d, num_units, biasTrue)是PyTorch中定义的一个全连接线性层。其中&#xff0c;d是输入特征的数量&#xff0c;num_units是输出特征的数量&#xff0c;而bias参数决定是否在这个线性变换中添加一个偏置项。 设置biasTrue与biasFalse的区别如下&#xff1a; 数学表示…...

代码随想录 Day10 栈与队列 LeetCode T239 滑动窗口的最大值 T347 前K个高频元素

简要介绍一下单调队列和优先级队列的不同 元素顺序的处理&#xff1a;单调队列中&#xff0c;元素的顺序是单调的&#xff0c;也就是说&#xff0c;队列中的元素按照特定的单调性&#xff08;递增或递减&#xff09;排列。这种特性使得单调队列在处理一些问题时非常高效&#…...

vue/自定义指令

需求&#xff1a; 页面有个input元素&#xff0c;现在要鼠标光标聚焦在上面&#xff0c;让每个页面上的标签都可以聚焦光标&#xff0c;比如&#xff0c;从A页面跳转到B页面的时候&#xff0c;我们依然要聚焦。如果要一遍遍地操作dom就会很麻烦。 这个时候&#xff0c;为了方便…...

借用binlog2sql工具轻松解析MySQL的binlog文件,再现Oracle的闪回功能

借用binlog2sql工具轻松解析MySQL的binlog文件 简介依赖配置用户权限选项配置案例&#xff1a;误UPDATE表数据回滚binlog2sql VS mysqlbinlog 看腻文章了就来听听视频演示吧&#xff1a;https://www.bilibili.com/video/BV1Zj411k7VW/ 简介 binlog2sql是美团大众点评开源的一…...

一次解决Pytorch训练时损失和参数出现Nan或者inf的经历

目前在做实验&#xff0c;参考了一个新的网络架构之后发现训练时损失出现Nan&#xff0c;参数了出现了inf的情况&#xff0c;先说说我的排查经历。 首先肯定是打印损失&#xff0c;损失是最容易出现Nan的&#xff0c;有各种原因&#xff0c;网上也有很多解决办法&#xff0c;我…...

【python入门篇】列表简介及操作(2)

列表是什么&#xff1f; 列表是由一系列按特定顺序排列的元素组成。你可以创建包含字母表中的所有字母、数字 0~9 或所有家庭成员的列表&#xff1b;也可以将任何东西加入列表中&#xff0c;其中的元素之间可以没有任何关系。列表通常包含多个元素&#xff0c;因此给列表指定一…...

数据结构与算法——19.红黑树

这篇文章我们来讲一下红黑树。 目录 1.概述 1.1红黑树的性质 2.红黑树的实现 3.总结 1.概述 首先&#xff0c;我们来大致了解一下什么是红黑树 红黑树是一种自平衡的二叉查找树&#xff0c;是一种高效的查找树。红黑树具有良好的效率&#xff0c;它可在 O(logN) 时间内完…...

js题解(三)

文章目录 柯里化模块乘法改变上下文 柯里化 已知 fn 为一个预定义函数&#xff0c;实现函数 curryIt&#xff0c;调用之后满足如下条件&#xff1a; 1、返回一个函数 a&#xff0c;a 的 length 属性值为 1&#xff08;即显式声明 a 接收一个参数&#xff09; 2、调用 a 之后&a…...

CompletableFuture异步回调

CompletableFuture异步回调 CompletableFutureFuture模式CompletableFuture详解1.CompletableFuture的UML类关系2.CompletionStage接口3.使用runAsync和supplyAcync创建子任务4.设置子任务回调钩子5.调用handle()方法统一处理异常和结果6.线程池的使用 异步任务的串行执行thenA…...

Python中匹配模糊的字符串

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 如何使用thefuzz 库&#xff0c;它允许我们在python中进行模糊字符串匹配。 此外&#xff0c;我们将学习如何使用process 模块&#xff0c;该模块允许我们在模糊…...

PHP图片文件管理功能系统源码

文件图库管理单PHP源码直接解压就能用&#xff0c;单文件&#xff0c;indexm.php文件可以重新命名&#xff0c;上传到需要访问的目录中&#xff0c; 可以查看目录以及各个文件&#xff0c;图片等和下载及修改管理服务。 源码下载&#xff1a;https://download.csdn.net/downloa…...

(枚举 + 树上倍增)Codeforces Round 900 (Div. 3) G

Problem - G - Codeforces 题意&#xff1a; 思路&#xff1a; 首先&#xff0c;目标值和结点权值是直接联系的&#xff0c;最值不可能直接贪心&#xff0c;一定是考虑去枚举一些东西&#xff0c;依靠这种枚举可以遍历所有的有效情况&#xff0c;思考的方向一定是枚举 如果去…...

websocket逆向【python实现websocket拦截】

python实现websocket拦截 前言一、拦截的优缺点优点:缺点:二、实现方法1.环境配置2.代码三、总结前言 开发者工具F12,筛选ws后,websocket的消息是这样显示的,如何获取这里面的消息呢? 以下是本篇文章正文内容 一、拦截的优缺点 主要讲解一下websocket拦截的实现,现在…...

软件测试自动化的成本效益分析

随着软件测试技术的发展&#xff0c;人们已经从最初的手工测试转变为手工和自动化技术相结合的测试方法。目前&#xff0c;人们更多的是关心自动化测试框架、自动化测试工具以及脚本研究等技术方面&#xff0c;而在软件自动化测试方案的效益分析方面涉及较少。 软件测试的目的是…...

【Java】状态修饰符 final static

目录 final 修饰我们的成员方法、成员变量、类 示例代码&#xff1a; final 修饰的局部变量 示例代码&#xff1a; static 示例代码&#xff1a; static 访问特点&#xff1a; 示例代码&#xff1a; static关键字的用途 示例代码&#xff1a; static 修饰常量 示例…...

笔试编程ACM模式JS(V8)、JS(Node)框架、输入输出初始化处理、常用方法、技巧

目录 考试注意事项 先审完题意&#xff0c;再动手 在本地编辑器&#xff08;有提示&#xff09; 简单题515min 通过率0%&#xff0c;有额外log 常见输入处理 str-> num arr&#xff1a;line.split( ).map(val>Number(val)) 初始化数组 new Array(length).fill(v…...

learn掩码张量

目录 1、什么是掩码张量 2、掩码张量的作用 3、代码演示 &#xff08;1&#xff09;、定义一个上三角矩阵&#xff0c;k0或者 k默认为 0 &#xff08;2&#xff09;、k1 &#xff08;3&#xff09;、k-1 4、掩码张量代码实现 &#xff08;1&#xff09;、输出效果 &…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...