Android RecycleView触摸事件记录

2024-06-01 11:36

本文主要是介绍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中触摸事件详解

这篇关于Android RecycleView触摸事件记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020896

相关文章

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio