解决SwipeRefreshLayout左右滑动事件冲突的问题
在使用SwipeRefreshLayout时我们注意到在SwipeRefreshLayout中左右滑动时可能也会触发下拉刷新的事件,这点让我们很不爽。追其原因是SwipeRefreshLayout对于y轴触摸举例十分明感,没有做太多的容差处理(似乎容差值仅有16),所以如果你不是完全水平的滑动的话就很可能会触发下拉刷新的事件。为了解决这个问题,我们重写了SwipeRefreshLayout的触摸事件,当触摸的X距离大于某个数值的时候,我们就让它认为我们是在左右滑动,不执行下拉刷新操作。
VerticalSwipeRefreshLayout
package kale.com.waterfall.extra.swiprefreshlayout;import android.content.Context; import android.support.v4.widget.SwipeRefreshLayout; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewConfiguration;/*** @author Jack Tony* @brief 只在竖直方向才能下拉刷新的控件* @date 2015/4/5*/ public class VerticalSwipeRefreshLayout extends SwipeRefreshLayout {private int mTouchSlop;// 上一次触摸时的X坐标private float mPrevX;public VerticalSwipeRefreshLayout(Context context, AttributeSet attrs) {super(context, attrs);// 触发移动事件的最短距离,如果小于这个距离就不触发移动控件mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();}@Overridepublic boolean onInterceptTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mPrevX = event.getX();break;case MotionEvent.ACTION_MOVE:final float eventX = event.getX();float xDiff = Math.abs(eventX - mPrevX);// Log.d("refresh" ,"move----" + eventX + " " + mPrevX + " " + mTouchSlop);// 增加60的容差,让下拉刷新在竖直滑动时就可以触发if (xDiff > mTouchSlop + 60) {return false;}}return super.onInterceptTouchEvent(event);} }
解决SwipeRefreshLayout左右滑动事件冲突的问题相关推荐
- scrollview嵌套listview 滑动事件冲突的解决方法
scrollview嵌套listview 滑动事件冲突的解决方法 参考文章: (1)scrollview嵌套listview 滑动事件冲突的解决方法 (2)https://www.cnblogs.co ...
- android 解决ListView点击与滑动事件冲突
如果你的ListView的Item有滑动功能,但又点击Item跳转到其它activity,这样若是在Adapter里面写点击事件是会导致滑动事件获取不到焦点而失效: 解决方法:不要在adapter里面 ...
- Android动画及滑动事件冲突解决(转载)
原文链接:http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android开发中动画和事件处理是程序员迈向高手的必经之路,也是重 ...
- Android之滑动事件冲突解决 Touch事件处理机制总结
android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN- ...
- ViewPager2滑动事件冲突
1. 场景分析 RecyclerView或SwipeRefreshLayout中嵌套ViewPager2,ViewPager2左右滑动困难,事件容易给RecyclerView或SwipeRefresh ...
- iOS 全屏侧滑手势/UIScrollView/UISlider间滑动手势冲突
七夕节福利 效果预览 一.前期准备 有一个支持全屏侧滑返回的视图控制器ViewController,ViewController.view上有一个UIScrollView,UIScrollView上有 ...
- 仿百度壁纸客户端(三)——首页单向,双向事件冲突处理,壁纸列表的实现
仿百度壁纸客户端(三)--首页单向,双向事件冲突处理,壁纸列表的实现 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度壁纸客户端( ...
- 仿百度壁纸客户端(三)——首页单向,双向事件冲突处理,壁纸列表的实现...
仿百度壁纸客户端(三)--首页单向,双向事件冲突处理,壁纸列表的实现 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度壁纸客户端( ...
- 解决SwipeRefreshLayout与Banner滑动冲突
import android.content.Context; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import ...
最新文章
- Adobe Reader 文档无法签名_手把手教你如何利用PDF阅读器压缩PDF文档
- Matrix工作室纳新管理规章
- 有关LinkedList常用方法的源码解析
- Android json数据解析及简单例子
- 【clickhouse】clickhouse 原生监控
- xs资料网-jdpaint编程图档下载_限时下载 | 西门子、三菱、欧姆龙PLC电气设计与编程自学宝典(3册)...
- C#设计一个Windows应用程序,在该程序中首先构造中学生、大学生等派生类,当输入相关数据,单击不同的按钮(“小学生”“中学生”“大学生”)将分别创建不同的学生对象,并输入当前的学生总人数,该学生的
- 小游戏《别踩白块》-第十一个程序20200625
- JavaScript实战操作(DOM,BOM)
- 佛祖保佑永无BUG python版本
- AndroidStudio导入arr包
- php实现视频转gif,一种在线视频转GIF的方法与流程
- i58400升级可以换什么cpu_宝贝标题关键词顺序可以换吗?关键词顺序对标题有什么影响?...
- 孙子兵孙子兵法全文_孙子兵法:如何应用于软件
- 嵌入式linux驱动开发--设备资源描述
- 网络安全笔记——第五天:VMware的常用操作
- 3年没写线段树题了,今天帮小学弟水了棵线段树,想不到现在依然有看到Accepted的鸡冻哈哈哈
- 开源EDA软件-KiCAD
- 【有序充电】基于粒子群算法实现电动汽车充电动态优化策略附matlab代码
- Ubantu安装搜狗输入法
热门文章
- win10 cortana 搜索无效怎么解决
- 京东AI研究院何晓冬:将先进的技术和模型落地到产业
- 常见索引结构—二叉搜索树
- 数据库性能优化—MySQL单表最大记录数超过多少时性能会严重下降
- About os.path
- Mac下搭建jekyll环境
- JavaScript高级编程学习6——Date
- PHP之父评价Facebook的HipHop项目:别当作银弹
- 怎么样才能写出出色的代码
- 6-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(远程升级STM32程序,基于Wi-Fi,同时支持升级Wi-Fi,APP控制版)...