Android中SwipeRefreshLayout和ViewPager左右滑动冲突的原因以及正确的解决方法
来源:互联网 发布:linux与网银 编辑:程序博客网 时间:2024/05/13 15:42
下拉刷新是我们软件中必不可少的一个功能,这也可以给用户带来非常好的用户体验,所以谷歌官方也出了下拉刷新控件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); }}
1 0
- Android中SwipeRefreshLayout和ViewPager左右滑动冲突的原因以及正确的解决方法
- 复制AItsuki的Android:SwipeRefreshLayout和ViewPager滑动冲突的原因和正确的解决方式
- Android:SwipeRefreshLayout和ViewPager滑动冲突的原因和正确的解决方式
- Android:SwipeRefreshLayout和ViewPager滑动冲突的原因和正确的解决方式
- SwipeRefreshLayout和ViewPager滑动冲突的原因和正确的解决方式
- SwipeRefreshLayout和ViewPager滑动冲突的原因和正确的解决方式
- SwipeRefreshLayout和Viewpager的滑动冲突问题
- SwipeRefreshLayout和Viewpager滑动时冲突解决方法
- SwipeRefreshLayout 包含左右滑动的banner手势冲突解决方法
- Android中ViewPager的左右滑动以及轮播功能
- ScrollView中嵌入ViewPager,ViewPager的左右滑动冲突问题
- SwipeRefreshLayout和ViewPager滑动冲突的原理分析及解决方案
- slidingmenu和ViewPager滑动冲突的解决方法
- ViewPager和ResideMenu左右滑动冲突解决方法。ResideMenu viewPager
- Android ViewPager嵌套ViewPager滑动冲突的解决方法
- Android ViewPager嵌套ViewPager滑动冲突的解决方法
- 解决SwipeRefreshLayout左右滑动事件冲突的问题
- 解决SwipeRefreshLayout左右滑动事件冲突的问题
- 第九课:VBO索引
- Java程序打印日历
- 设计模式之分析和需求的概念
- Apache ant详解
- Oracle中CHAR类型不足位数时,用空格自动补足位数
- Android中SwipeRefreshLayout和ViewPager左右滑动冲突的原因以及正确的解决方法
- 《Redis官方文档》Redis集群教程
- 读取写入tar/zip文件(go语言)
- hdoj 5625 Clarke and chemistry
- 页面设计一般是叠加而不是拼接
- DB2中自动清理数据库历史文件
- iOS的DeviceToken随生产环境和开发环境变化
- spark学习笔记
- Missing iOS Distribution signing identity for …, 在打包的时候发现证书过期了。