Android中SwipeRefreshLayout和ViewPager左右滑动冲突的原因以及正确的解决方法
2016-02-16 17:55
736 查看
下拉刷新是我们软件中必不可少的一个功能,这也可以给用户带来非常好的用户体验,所以谷歌官方也出了下拉刷新控件SwipeRefreshLayout,但是我们使用谷歌官方的SwipeRefreshLayout的时候会发现,SwipeRefreshLayout会和ViewPager滑动有冲突,查阅了一些资料,发现SwipeRefreshLayout对X轴容差值特别小,所以左右滑动其他控件的时候SwipeRefreshLayout就会与其他控件的事件产生冲突,说了那么多,我就来教教大家怎么来解决这个问题;
重写SwipeRefreshLayout的onIntercept方法,判断用户是横向滑动还是纵向滑动,如果是横向滑动自己不处理事件,交给其他控件,如果是纵向滑动就拦截事件,自己处理;
public class SwipeRefreshLayoutCompat extends SwipeRefreshLayout { // 是否存在左右滑动事件 private boolean mDragger; // 记录手指按下的位置 private float mStartY, mStartX; // 出发事件的最短距离 private int mTouchSlop; public SwipeRefreshLayoutCompat(Context context, AttributeSet attrs) { super(context, attrs); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // 记录手指按下的位置 mStartY = ev.getY(); mStartX = ev.getX(); //初始化左右滑动事件为false mDragger = false; break; case MotionEvent.ACTION_MOVE: //如果左右滑动事件为true 直接返回false 不拦截事件 if (mDragger) { return false; } // 获取当前手指位置 float endY = ev.getY(); float endX = ev.getX(); //获取X,Y滑动距离的绝对值 float distanceX = Math.abs(endX - mStartX); float distanceY = Math.abs(endY - mStartY); // 如果X轴位移大于Y轴距离,那么将事件交给其他控件 if (distanceX > mTouchSlop && distanceX > distanceY) { mDragger = true; return false; } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: //初始化左右滑动事件为false mDragger = false; break; } return super.onInterceptTouchEvent(ev); } }
相关文章推荐
- android权限添加
- android studio AIDL跨进程通信
- Android开发者学习资料寻找的四大平台资源
- ListView或者GridView取消滑动效果
- Android开发中GridView的使用
- android 使用TableLayout 实现布局自动拉伸宽度
- Android编程之DialogFragment源码详解(二)
- Android编程之DialogFragment源码详解(一)
- 手机开启按键音后,Gallery滚动的时候会发出声音的问题
- Android中TextView深入使用----单独TextView实现图文混排
- Android学习-Layout布局
- Android关于混淆打包的记录
- [Android]Dagger2Metrics - 测量DI图表初始化的性能(翻译)
- androidStudio常见错误
- android Button按钮实现点击效果代码附带demo下载
- Android 状态栏,标题栏,屏幕高度获取总结
- Android热修复_待修复dex打包详细流程
- android 事件分发与滑动冲突
- Android 连接webservice(利用谷歌提供的jar包)
- Android的存储系统—Vold与MountService分析(一)