Android下拉刷新与轮播图滑动冲突解决方案
发布时间 - 2026-01-10 22:54:51 点击率:次最近在开发中遇到了这样一个问题,在下拉刷新组件中包含了一个轮播图组件,当左右滑动的图片时很容易触发下拉刷新,如下图所示:
如图中红色箭头所示方向切换轮播图,很容易触发下拉刷新。网上查了很多方法,发现都不能很好的解决,于是自己研究了下。
我选用的第三方控件
1.下拉刷新我选用的是chanven的CommonPullToRefresh(系统自带的SwipeRefreshLayout也应该是一样的道理);
2.轮播图选用的是daimajia的AndroidImageSlider(用ViewPager也是一样的道理)。具体界面自行脑补哈。
解决方案
我们仔细分析一下,我们要解决的实际上就是控件的事件拦截问题。现在的情况是外层的控件已经拦截了斜着滑动的事件,那么我们只要让外层的控件把这个事件分发下去就可以了【在dispatchTouchEvent(MotionEvent ev)方法中处理】,那么问题来了,怎么判断斜着的事件。网上有很多方案,但都不是很完美。我想到了一种,跟大家分享一下,先看图:
方案分析
1.图一中x=y,作为临界条件,这时α刚好等于45°;
2.图二中x<y,α>45°,这时我们判断为上下移动;
3.图三中x>y,α<45°,这时我们判断为左右移动。
那么我们只要判断tan(α)与tan(45)的关系就能判断是左右还是上下移动。我们写一个类继承PtrClassicFrameLayout,下面是关键代码:
public class SubPtrClassicFrameLayout extends PtrClassicFrameLayout {
private float mDownX;
private float mDownY;
public SubPtrClassicFrameLayout(Context context) {
super(context);
}
public SubPtrClassicFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SubPtrClassicFrameLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mDownX = ev.getX();
mDownY = ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:
float moveX = ev.getX();
float moveY = ev.getRawY();
float diffX = Math.abs(moveX - mDownX);
float diffY = Math.abs(moveY - mDownY);
boolean isHorizon = Math.tan(diffY / diffX) < Math.tan(45.0);
if (isHorizon) {
return dispatchTouchEventSupper(ev);
}
break;
}
return super.dispatchTouchEvent(ev);
}
}
我们可以看到,其实很简单,关键就是判断当前位置相对于初始位置的滑动方向。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android下拉刷新
# 冲突
# webview下拉刷新
# Android滑动冲突
# Android自定义控件实现简单的轮播图控件
# Android ViewPager实现轮播图效果
# Android自定义控件实现优雅的广告轮播图
# Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigur
# Android如何使用RecyclerView打造首页轮播图
# 简单实现android轮播图
# Android开发在轮播图片上加入点击事件的方法
# Android实现轮播图无限循环效果
# Android实现ViewPage轮播图效果
# android常见手动和自动轮播图效果
# 的是
# 很容易
# 所示
# 斜着
# 我想
# 来了
# 很好
# 就能
# 有很多
# 是一样的
# 网上
# 不是很
# 可以看到
# 要让
# 一个问题
# 相对于
# 第三方
# 大家分享
# 也应
# 三中
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何在服务器上配置二级域名建站?
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Laravel集合Collection怎么用_Laravel集合常用函数详解
javascript读取文本节点方法小结
Laravel如何使用Service Container和依赖注入?(代码示例)
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
教你用AI润色文章,让你的文字表达更专业
如何在香港免费服务器上快速搭建网站?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
七夕网站制作视频,七夕大促活动怎么报名?
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
如何安全更换建站之星模板并保留数据?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
装修招标网站设计制作流程,装修招标流程?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
Android自定义控件实现温度旋转按钮效果
Laravel如何实现用户密码重置功能?(完整流程代码)
C#如何调用原生C++ COM对象详解
长沙企业网站制作哪家好,长沙水业集团官方网站?
Python制作简易注册登录系统
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Bootstrap整体框架之CSS12栅格系统
如何快速搭建高效可靠的建站解决方案?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
高端建站三要素:定制模板、企业官网与响应式设计优化
Laravel如何生成URL和重定向?(路由助手函数)
如何基于云服务器快速搭建个人网站?
如何基于云服务器快速搭建网站及云盘系统?
如何快速搭建FTP站点实现文件共享?
用yum安装MySQLdb模块的步骤方法
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何用低价快速搭建高质量网站?
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何选择可靠的免备案建站服务器?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
javascript中对象的定义、使用以及对象和原型链操作小结
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Python函数文档自动校验_规范解析【教程】
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
香港网站服务器数量如何影响SEO优化效果?

