Android RecycleView触摸事件记录

文章目录

  • 一、前言
  • 二、onFilterTouchEventForSecurity
  • 三、addOnItemTouchListener
  • 四、参考链接

一、前言

在开发中有时候需要对RecycleView的触摸事件进行拦截和处理,RecyclView本身事件比较复杂,直接使用View的事件体系不能完成特定业务。比如区分滑动和点击事件。

二、onFilterTouchEventForSecurity

该事件属于一个系统比较底层的事件。需要继承RecycleView才能处理。
在阿里的通义灵码上面对该函数的解释如下:

onFilterTouchEventForSecurity() 是一个在Android框架内部使用的保护方法,主要存在于View类中。这个方法并不经常直接由开发者调用,而是系统自动调用它来确保触摸事件的安全性,特别是在处理来自不同安全上下文的输入事件时。
方法作用:
此方法用于过滤(或验证)触摸事件,以确定它们是否源自安全的来源,特别是当应用程序运行在多窗口环境或者有权限限制的情况下。它检查触摸事件的来源,确保这些事件来自于可信任的应用程序或界面,防止恶意应用伪造输入事件来操控其他应用。
默认行为:
默认情况下,onFilterTouchEventForSecurity()方法会检查触摸事件的标志,确保事件标记为FLAG_WINDOW_IS_OBSCURED或FLAG_TRUSTED_TOUCH之一。如果事件不符合安全标准,该方法将返回false,表示事件应被丢弃。反之,如果事件来源可信,则返回true,允许事件继续传递给应用的触摸事件处理链。
开发者角度:
通常,开发者不需要直接调用或重写这个方法,因为Android系统已经妥善处理了安全检查。但是,对于那些需要深入了解或定制触摸事件处理流程的高级应用场景,了解这个方法的作用是有帮助的。
注意:
除非你在开发系统级组件或有特殊安全需求的应用,否则直接修改或依赖这个方法的行为可能不是常规做法。
安全性和输入验证是Android系统设计的重要部分,确保遵循最佳实践,避免自行绕过这类安全检查,以免引入安全漏洞。
由于这是一个较底层的框架内部逻辑,大部分应用开发过程中不会直接接触到这个方法,更多关注于如何处理onTouchEvent()、setOnClickListener()等高层级的触摸事件响应即可。

示例代码如下:

public class MyRecyclerView extends RecyclerView {@Overridepublic boolean onFilterTouchEventForSecurity(MotionEvent event) {
//        Log.e("YM-->", "onFilterTouchEventForSecurity---->坐标x:" + event.getX() + "--->坐标y:" + event.getY());if (event.getAction() == MotionEvent.ACTION_DOWN) {downEvent = event;}if (event.getAction() == MotionEvent.ACTION_UP) {if (downEvent != null) {float x = event.getX() - downEvent.getX();float y = event.getY() - downEvent.getY();if (Math.abs(x) < 10 && Math.abs(y) < 10) {if (mRecyclerViewClickListener != null) {return mRecyclerViewClickListener.onClick(event);}}}downEvent = null;}return super.onFilterTouchEventForSecurity(event);}
}private RecyclerViewClickListener mRecyclerViewClickListener;public void setRecyclerViewClickListener(RecyclerViewClickListener listener) {mRecyclerViewClickListener = listener;}
interface RecyclerViewClickListener {//返回false表示不再继续执行后续事件,true表示执行后续事件boolean onClick(MotionEvent event);
}

三、addOnItemTouchListener

以下解释源自阿里的通义灵码

在Android中,RecyclerView.addOnItemTouchListener()方法用于给RecyclerView添加一个全局的触摸事件监听器,这个监听器能够捕获发生在RecyclerView上的所有触摸事件,包括那些没有被子View(如单独的列表项)消费的事件。这对于想要监听整个RecyclerView的点击、长按或者其他手势事件非常有用,而不仅仅是单个列表项的事件。

示例代码如下:

	class MyTouchListener implements RecyclerView.OnItemTouchListener {@Overridepublic boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {// 在这里根据MotionEvent判断是否需要拦截触摸事件// 返回true表示事件被拦截,RecyclerView及其子View不再接收此事件// 返回false则事件继续向下传递return false;}@Overridepublic void onTouchEvent(RecyclerView rv, MotionEvent e) {// 这里处理你想要响应的触摸事件}@Overridepublic void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {// 这个方法用于子View请求RecyclerView不要拦截触摸事件}
}

四、参考链接

  1. Android 触摸事件机制ViewGroup中触摸事件详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Full Stack Programming Further Web Programming COSC2758

1. Overview (you must read thisfirst) In this assignment, you will develop a Full Stack Web Application to complete the front‐end prototype built from assignment 1. You are required to use the following stacks:  Frontend: ReactJS or ReactTS  Mid…

iOS开发中copy on write

Copy-On-Write&#xff08;写时复制&#xff09;是一种内存管理技术&#xff0c;在iOS开发中被广泛使用。下面是一些常见的使用场景&#xff1a; 不可变对象的复制&#xff1a;当对一个不可变对象执行复制操作时&#xff0c;实际上只会创建该对象的引用计数副本&#xff0c;而不…

沉淀:心灵的宁静之道

在这个信息爆炸的时代&#xff0c;我们常常被繁杂的事务淹没。每日忙碌的工作、应接不暇的社交活动、纷至沓来的琐事&#xff0c;让人难以静下心来。最近&#xff0c;我也深感疲惫和迷茫&#xff0c;仿佛被生活的巨浪推着前行&#xff0c;却无暇思考方向。 沉淀&#xff0c;是一…

【C++】初识C++

【C】初识C 文章概括关键字&#xff08;C98&#xff09;命名空间命名空间的定义命名空间的特性 输入与输出C中的输入输出输入输出的命名空间 缺省参数函数重载引用引用的概念引用的特性引用地使用场景引用做参数引用做返回值 常引用常引用的俩个例子 引用与指针的区别 内联函数…

web端中使用vue3 实现 移动端的上拉滚动加载功能

需要再web端实现上拉加载 纯属web端的东西 类似这样的功能效果 能够在web端实现滚动分页 overflow-y: scroll;首先给这个大盒子 一个 css 样式 支持滚动 再给固定高度 这个盒子里的内容就能立马滚动起来 给这个盒子一个ref 的属性 以及 有原生滚动事件 scroll const handle…

c++ 左右值与引用折叠

C 增加了一个新的类型&#xff0c;右值引用&#xff0c;记作“&&” 左值&#xff1a;是指在内存中有明确的地址&#xff0c;我们可以找到这块地址的数据&#xff08;可取地址&#xff09; 右值&#xff1a;只提供数据&#xff0c;无法找到地址&#xff08;不可取地址&…

分布式防止重复请求或者高并发防止重复提交

1&#xff1a;自定义注解JRepeat package com.huan.study.mybatis.config;import java.lang.annotation.*;/*** 防止重复提交的注解**/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documented public interface JRepeat {/*** 超时时间** return*/int …

通过龙讯旷腾PWmat发《The Journal of Chemical Physics》 :基于第一性原理分子动力学热力学积分的离子溶剂化自由能计算

背景导读 离子溶解是电化学中一个重要的过程。电化学反应中许多重要的参数&#xff0c;例如电化学还原电位、无限稀释活度系数、亨利定律溶解常数和离子溶解度等&#xff0c;都与离子的溶剂化能有关。然而&#xff0c;由于测量技术和数据处理的困难&#xff0c;离子溶剂化能的…

vCenter7.0安装部署

vCenter7.0安装部署 一、准备环境二、创建新的虚拟机1.创建虚拟机2.第3-5步可直接默认安装并同意许可协议。3.其他设置4.第一阶段直接点完成即可 三、进入第二阶段安装&#xff08;输入ip&#xff1a;5480进入安装界面&#xff09; 一、准备环境 准备一台exsi&#xff0c;并登…

【定义动态组件】

利用动态组件可以动态切换页面中现实的组件&#xff0c;使用标签可以定义动态组件&#xff0c;语法格式如下。 <component is "要渲染的组件"></component>在上述语法中&#xff0c;标签必须配合is属性一起使用&#xff0c;is属性属性值表示要渲染组件&…

MySQL之查询性能优化(九)

查询性能优化 MySQL查询优化器的局限性 UNION的限制 有时&#xff0c;MySQL无法将限制条件从外层"下推"到内层&#xff0c;这使得原本能够限制部分返回结果的条件无法应用到内层查询的优化上。如果希望UNION的各个子句能够根据LIMIT只取部分结果集&#xff0c;或者…

项目沟通管理

目录 1.概述 2.项目沟通的重要性和必要性 2.1.项目沟通的重要性 2.2.项目沟通的必要性 2.3.具体措施 3.三个过程 3.1.规划沟通管理 3.2.管理沟通 3.3.监督沟通 3.4.对应过程组 4.应用场景 4.1.十个应用场景 4.2.新产品开发项目需要与多个部门协调沟通 5.总结 1.概…

调节效应多元统计回归

什么是调节效应&#xff0c;给个例子说明一下: 背景 假设我们有一个国家的经济数据&#xff0c;我们希望研究产业数字化是否调节了环境规制对产业结构调整的影响。 步骤 1. 假设检验 原假设 (H0)&#xff1a; 产业数字化对环境规制与产业结构调整之间的关系没有调节作用。…

C++ | 类对象初始化

文章目录 概述一、定义介绍二、操作教程1.直接初始化&#xff08;Direct Initialization&#xff09;2.复制初始化&#xff08;Copy Initialization&#xff09;3.列表初始化&#xff08;List Initialization&#xff09; 概述 本节介绍类对象初始化。 一、定义介绍 在C中通过…

银河麒麟V10_系统如何自定义添加桌面右键菜单选项

本篇博客取自《银河麒麟桌面操作系统软件适配常见问题指导手册》官网可以下载。 环境 系统版本 适用系统&#xff1a;V10&#xff08;SP1&#xff09;适用架构&#xff1a;X86、ARM、MIPS 其他版本和架构可做参考。 解决方案 使用下面的这个demo 编译就可以看到效果 peony…

每日一题——Python实现PAT甲级1063 Set Similarity(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 优点 改进建议 时间复杂度分析 空间复杂度分析 总结 我要更强 优化方…

【C语言】指针(4)

一、回顾 在这之前&#xff0c;我们学习了很多关于指针的内容&#xff0c;我们先在这里简单的回顾一下。 1、一级指针 int* p; -- 整形指针-指向整形的指针 char* p; ... void* p;... ... 2、二级指针 int** p; char** p; ... 3、数组指针 -- 指向数组的指针 int (*p)[ ]…

3038. 相同分数的最大操作数目 I(Rust模拟击败100%Rust用户)

题目 给你一个整数数组 nums &#xff0c;如果 nums 至少 包含 2 个元素&#xff0c;你可以执行以下操作&#xff1a; 选择 nums 中的前两个元素并将它们删除。 一次操作的 分数 是被删除元素的和。 在确保 所有操作分数相同 的前提下&#xff0c;请你求出 最多 能进行多少次…

在 Vue 中实现算法可视化

算法是计算机科学的核心&#xff0c;而算法可视化有助于更好地理解算法的运行过程。本文将介绍如何在 Vue.js 中实现算法可视化&#xff0c;以排序算法为例&#xff0c;逐步展示数据变化过程。 环境搭建 首先&#xff0c;确保你已安装 Vue CLI&#xff0c;可以使用以下命令创…

Python | Leetcode Python题解之第136题只出现一次的数字

题目&#xff1a; 题解&#xff1a; class Solution:def singleNumber(self, nums: List[int]) -> int:return reduce(lambda x, y: x ^ y, nums)