最近在开发中遇到了这样一个问题,在下拉刷新组件中包含了一个轮播图组件,当左右滑动的图片时很容易触发下拉刷新,如下图所示:
如图中红色箭头所示方向切换轮播图,很容易触发下拉刷新。网上查了很多方法,发现都不能很好的解决,于是自己研究了下。
我选用的第三方控件
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常见手动和自动轮播图效果
# 的是
# 很容易
# 所示
# 斜着
# 我想
# 来了
# 很好
# 就能
# 有很多
# 是一样的
# 网上
# 不是很
# 可以看到
# 要让
# 一个问题
# 相对于
# 第三方
# 大家分享
# 也应
# 三中
相关文章:
如何在IIS中新建站点并配置端口与物理路径?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何挑选优质建站一级代理提升网站排名?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何快速搭建支持数据库操作的智能建站平台?
常州企业网站制作公司,全国继续教育网怎么登录?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
如何用狗爹虚拟主机快速搭建网站?
如何快速上传自定义模板至建站之星?
建站之星备案流程有哪些注意事项?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
全景视频制作网站有哪些,全景图怎么做成网页?
如何快速搭建高效简练网站?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
创业网站制作流程,创业网站可靠吗?
Python文件管理规范_工程实践说明【指导】
建站中国官网:模板定制+SEO优化+建站流程一站式指南
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
Python多线程使用规范_线程安全解析【教程】
宝塔Windows建站如何避免显示默认IIS页面?
测试制作网站有哪些,测试性取向的权威测试或者网站?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
php json中文编码为null的解决办法
微课制作网站有哪些,微课网怎么进?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
免费网站制作appp,免费制作app哪个平台好?
开封网站制作公司,网络用语开封是什么意思?
如何零成本快速生成个人自助网站?
如何在云服务器上快速搭建个人网站?
如何在Windows环境下新建FTP站点并设置权限?
常州企业建站如何选择最佳模板?
建站主机是什么?如何选择适合的建站主机?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
建站之星安全性能如何?防护体系能否抵御黑客入侵?
如何快速选择适合个人网站的云服务器配置?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
高防服务器租用首荐平台,企业级优惠套餐快速部署
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
已有域名和空间如何快速搭建网站?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何在万网开始建站?分步指南解析
如何在IIS中新建站点并解决端口绑定冲突?
建站之家VIP精选网站模板与SEO优化教程整合指南
Python如何创建带属性的XML节点
建站之星安装提示数据库无法连接如何解决?
如何制作网站标识牌,动态网站如何制作(教程)?
如何快速查询网站的真实建站时间?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
*请认真填写需求信息,我们会在24小时内与您取得联系。