viewpager和SwipeRefreshLayout下拉刷新冲突解决
来源:互联网 发布:游戏键盘 知乎 编辑:程序博客网 时间:2024/04/23 18:54
重写SwipeRefreshLayout的onIntercept方法就可以很简单的解决了。
思路:
1. 因为下拉刷新,只有纵向滑动的时候才有效,那么我们就判断此时是纵向滑动还是横向滑动就可以了。
2. 纵向滑动就拦截事件,横向滑动不拦截。
3. 怎么判断是纵向滑动还是横向滑动,只要判断Y轴的移动距离大于X轴的移动距离那么就判定为纵向滑动就行了。
以下就是重写后的SwipeRefreshLayout,直接复制到项目就可以使用了。
/**
* Created by AItsuki on 2016/1/20.
*/
public class VpSwipeRefreshLayout extends SwipeRefreshLayout {
private float startY;private float startX;// 记录viewPager是否拖拽的标记private boolean mIsVpDragger;private final int mTouchSlop;public VpSwipeRefreshLayout(Context context, AttributeSet attrs) { super(context, attrs); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) { int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // 记录手指按下的位置 startY = ev.getY(); startX = ev.getX(); // 初始化标记 mIsVpDragger = false; break; case MotionEvent.ACTION_MOVE: // 如果viewpager正在拖拽中,那么不拦截它的事件,直接return false; if(mIsVpDragger) { return false; } // 获取当前手指位置 float endY = ev.getY(); float endX = ev.getX(); float distanceX = Math.abs(endX - startX); float distanceY = Math.abs(endY - startY); // 如果X轴位移大于Y轴位移,那么将事件交给viewPager处理。 if(distanceX > mTouchSlop && distanceX > distanceY) { mIsVpDragger = true; return false; } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: // 初始化标记 mIsVpDragger = false; break; } // 如果是Y轴位移大于X轴,事件交给swipeRefreshLayout处理。 return super.onInterceptTouchEvent(ev);}
}
我这里只是贴出来解决方法,原文博主为我们分析了很多源码,大家可以去学习一下,我们一起进步!链接地址如下:
http://blog.csdn.net/u010386612/article/details/50548977#bottom
0 0
- viewpager和SwipeRefreshLayout下拉刷新冲突解决
- SwipeRefreshLayout下拉刷新冲突解决
- SwipeRefreshLayout下拉刷新冲突解决
- 解决SwipeRefreshLayout和webview下拉刷新冲突问题
- 解决SwipeRefreshLayout和webview下拉刷新冲突问题
- SwipeRefreshLayout 嵌套PullToRefreshListView下拉刷新冲突解决
- 两句代码解决ViewPager滑动与SwipeRefreshLayout下拉刷新冲突
- ViewPager左右滑动与SwipeRefreshLayout下拉刷新冲突
- 解决listview下拉与SwipeRefreshLayout下拉刷新冲突
- SwipeRefreshLayout下拉刷新跟listview下拉滑动冲突解决
- 解决SwipeRefreshLayout下拉刷新与ListView下拉的冲突
- SwipeRefreshLayout下拉刷新与下拉控件冲突解决
- 解决使用`SwipeRefreshLayout`下拉刷新和左右滑动事件冲突的问题
- Android WebView下拉刷新与SwipeRefreshLayout事件冲突解决
- Android SwipeRefreshLayout 嵌套 CoordinatorLayout 下拉刷新 事件冲突解决
- 解决SwipeRefreshLayout下拉刷新与SwipeMenuListView的冲突
- SwipeRefreshLayout(下拉刷新)嵌套ViewPager时产生的滑动(不畅)冲突
- ViewPager与SwipeFreshLayout(下拉刷新)滑动冲突的解决
- java中对cookie读写操作
- iOS_获取视频第一帧图片
- iOS: 常用的宏
- MySQL常用函数
- 自动点击
- viewpager和SwipeRefreshLayout下拉刷新冲突解决
- ajax跨域问题
- 第十三周项目4-Floydu算法的验证
- 动画总结
- EditText的富媒体开发(Edittext显示网络图片) 二
- 原生jsonp解决跨域问题例子_获取第三方天气数据
- JavaScript入门(八) - 第二阶段练习
- U盘容量减小回复方法,不需要借助第三方工具
- 软件低耦合、高内聚的理解