【Android】RecyclerView纵向倾斜滑动,触发ViewPage2横向滑动而导致的滑动冲突问题

问题描述

场景ViewPage2+Fragment+RecyclerView(我的项目里RecycleView外层还套了一层SmartRefreshLayout)

因ViewPage2滑动太灵敏,RecyclerView纵向倾斜滑动,触发ViewPage2横向滑动而导致的滑动冲突问题

解决方案:

纵向倾斜滑动时,其实纵向、横向这两个动作都已触发了,在横向灵敏度高的情况下,可通过给横向滑动设置一个最小临界条件,控制横向滑动的触发条件,不至于横向滑动那么灵敏。

因我的子布局是SmartRefreshLayout+RecycleView,如果你的子布局就只有RecycleView,只需将我下面自定义的CustomRefreshLayout 类里的SmartRefreshLayout替换成RecycleView就行。

/*** 解决ViewPage2内嵌RecyclerView时,因ViewPage2滑动太灵敏,RecyclerView纵向倾斜滑动,* 触发ViewPage2横向滑动的滑动冲突问题*/
class CustomRefreshLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : SmartRefreshLayout(context, attrs, defStyleAttr) {private var startX = 0fprivate var startY = 0fcompanion object {const val MIN_DISTANCE = 100 // 设置一个最小滑动距离,以减少误判}override fun dispatchTouchEvent(ev: MotionEvent): Boolean {when (ev.action) {MotionEvent.ACTION_DOWN -> {startX = ev.xstartY = ev.yparent.requestDisallowInterceptTouchEvent(true) // 初始按下时,不让父控件拦截}MotionEvent.ACTION_MOVE -> {val endX = ev.xval endY = ev.yval disX = abs(endX - startX)val disY = abs(endY - startY)// 如果横向滑动距离大于纵向滑动距离,且大于设定的最小距离,则认为是水平滑动if (disX > disY) {Log.e("dispatchTouchEvent 横向滑动:", "disX= $disX disY= $disY")// 判断左右滑动的灵敏度,当左右滑动距离大于100 允许父控件处理滑动。if (disX > MIN_DISTANCE) {parent.requestDisallowInterceptTouchEvent(false)}} else {Log.e("dispatchTouchEvent 纵向滑动:", "disX= $disX disY= $disY")// 纵向滑动,不让父控件拦截parent.requestDisallowInterceptTouchEvent(true)}}MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {// 触摸事件结束时恢复默认行为parent.requestDisallowInterceptTouchEvent(false)}}return super.dispatchTouchEvent(ev)}
}
<CustomRefreshLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv"android:layout_width="match_parent"android:layout_height="wrap_content"/>
</CustomRefreshLayout>

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

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

相关文章

Google Earth Engine(GEE)——导出影像video到自己的Google硬盘当中

函数: Export.video.toDrive(collection, description, folder, fileNamePrefix, framesPerSecond, dimensions, region, scale, crs, crsTransform, maxPixels, maxFrames) Creates a batch task to export an ImageCollection as a video to Drive. The collection must on…

极简opencv操作xml文件

目标 修改xml文件&#xff0c;先产生一个临时文件&#xff0c;拷贝&#xff0c;修改&#xff0c;改名&#xff0c;使用opencv 非常简单地就可以搞定配置xml文件 code #include <opencv2/opencv.hpp> #include <iostream> #include <opencv2/core/utils/files…

2 程序的灵魂—算法-2.4 怎样表示一个算法-2.4.2 用流程图表示算法-【例 2.9】

将例 2.4 求 1-1/21/3-1/41/99-1/100 的算用流程图表示。 一个流程图包括&#xff1a; 1. 表示相应操作的框&#xff1b; 2. 带箭头的流程线&#xff1b; 3. 框内外必要的文字说明。

Transformer模型探索:Hugging Face库实战篇二——模型与分词器解析

注&#xff1a;本系列教程仅供学习使用, 由原作者授权, 均转载自小昇的 博客 。 文章目录 前言模型 加载模型 保存模型 分词器 分词策略 加载与保存分词器编码与解码文本 处理多段文本 Padding 操作 Attention masks直接使用分词器编码句子对 前言 在上一篇文章 《开箱即…

网络工程师的工具箱:这些软件你用过吗?(非常详细)零基础入门到精通,收藏这一篇就够了

今天&#xff0c;我想和大家聊一聊那些能够大大提升工作效率、简化复杂任务的必备软件工具。无论你是刚入行的新手&#xff0c;还是经验丰富的老手&#xff0c;这些工具都是你的工作利器&#xff0c;能够帮助你轻松应对各种网络挑战。 让我们一起来看看这些软件&#xff0c;看…

SSL证书加私钥会影响网速吗?

当谈及SSL证书和私钥对网速的影响时&#xff0c;我们首先需要了解SSL协议的作用和工作原理。SSL证书和私钥是SSL协议的核心组成部分&#xff0c;用于加密数据传输和确保网络安全。在讨论这个问题之前&#xff0c;我们先来简要了解一下SSL协议以及SSL证书和私钥的作用。 SSL协议…

上海市计算机学会竞赛平台2024年1月月赛丙组星号三角阵(三)

题目描述 给定一个整数 &#x1d45b;n&#xff0c;输出一个 &#x1d45b;n 行 &#x1d45b;n 列的星号三角阵&#xff0c;直角位于图形的右上角。 例如当 &#x1d45b;4n4 时&#xff0c;输出 **********输入格式 单个整数表示 &#x1d45b;n。 输出格式 共 &#x…

python-不定方程求解

[题目描述] 给定正整数 a&#xff0c;b&#xff0c;c。求不定方程axbyc 关于未知数 x 和 y 的所有非负整数解组数。输入&#xff1a; 一行&#xff0c;包含三个正整数 a&#xff0c;b&#xff0c;c&#xff0c;两个整数之间用单个空格隔开。每个数均不大于 1000。输出&#xff…

IDEA创建web项目

IDEA创建web项目 第一步&#xff1a;创建一个空项目 第二步&#xff1a;在刚刚创建的项目下创建一个子模块 第三步&#xff1a;在子模块中引入web 创建结果如下&#xff1a; 这里我们需要把这个目录移到main目录下&#xff0c;并改名为webapp&#xff0c;结果如下 将pom文件…

一文读懂HC-05蓝牙模块

在当今通信模式多种多样的情况下&#xff0c;无线传输越来越受到广大开发者的欢迎。其中蓝牙技术更是在现代社会中扮演着至关重要的角色&#xff0c;而其中蓝牙透传模块是目前最简单也是最普遍的一种蓝牙通信模块。HC-05蓝牙模块作为其中一种最常见的蓝牙模块&#xff0c;在各个…

25. 一个双高斯照相物镜的设计

导论&#xff1a; 双高斯照相物镜的设计思想&#xff0c;当β-1时&#xff0c;由于其对称&#xff0c;彗差、畸变和倍率色差自动校正为0&#xff0c;利用中间两块厚透镜可以校正场曲&#xff0c;选取合适的光阑位置可以校正像散&#xff0c;在厚透镜中加胶合面使每个半部校正位…

High Performance Design for HDFS with Byte-Addressability of NVM and RDMA——论文泛读

ICS 2016 Paper 分布式元数据论文阅读笔记整理 问题 非易失性存储器&#xff08;NVM&#xff09;提供字节寻址能力&#xff0c;具有类似DRAM的性能和持久性&#xff0c;提供了为数据密集型应用构建高通量存储系统的机会。HDFS&#xff08;Hadoop分布式文件系统&#xff09;是…

掌握React的条件渲染:技巧与实践

掌握React的条件渲染&#xff1a;技巧与实践 大家好&#xff0c;我是极客前端探索者&#xff0c;今天我们将深入探讨React中的一项基础而强大的特性——条件渲染。无论是新手还是有经验的开发者&#xff0c;掌握条件渲染都能极大地提升你的React应用的灵活性和用户体验。如果你…

2024第15届东莞国际电子智造及微电子展览会

2024第15届东莞国际电子智造及微电子展览会 The 15th Dongguan International Electronic Intelligent Manufacturing and Microelectronics Exhibition in 2024 时间&#xff1a;2024年11月18-20日 地点&#xff1a;广东现代国际展览中心 详询主办方陆先生 I38&#xff0…

手写实现call函数和应用场景

1. 手写实现call函数 var person {getName:function(){console.log(this) //windowreturn this.name}}var man{name:张三}console.log(person.getName) // undefinedconsole.log(person.getName.call(man)) //张三//------------------------------------------//手写call函数…

java项目中的高并发处理

在Java面试中&#xff0c;当被问及项目中的高并发处理时&#xff0c;你可以从以下几个方面来分享经验&#xff1a; 1. 项目背景介绍 简要介绍项目的业务场景和功能&#xff0c;以及为什么需要高并发处理。 2. 并发量评估 描述如何评估系统需要处理的并发量&#xff0c;包括…

vuejs3 pinia持久化存储

pinia地址&#xff1a; 开始 | Pinia 插件地址&#xff1a; 快速开始 | pinia-plugin-persistedstate 先安装pinia npm install pinia 再安装插件 安装pinia后&#xff0c;再安装这个插件 npm i pinia-plugin-persistedstate 全局中引入持久化插件 在src目录下的main…

react传参有哪些常用方法?--Props,Context API和Redux全局管理

在 React 中&#xff0c;父子组件之间的传参主要通过以下几种方式实现&#xff1a; 1&#xff09; Props 传递&#xff1a;父子传参 2&#xff09;Context API&#xff1a; 跨多层组件传递数据 3&#xff09; Redux&#xff1a; 全局状…

基于Django的博客系统之增加手机验证码登录(九)

需求文档 概述 实现基于Redis和第三方短信服务商的短信验证码登录功能。用户可以通过手机号码获取验证码&#xff0c;并使用验证码进行登录。 需求细节 用户请求验证码 用户在登录页面输入手机号码并请求获取验证码。系统生成验证码并将其存储在Redis中&#xff0c;同时通过…

【Android】安卓开发的前景

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…