Android解决下拉刷新控件SwipeRefreshLayout和ViewPager的滑动冲突
2017-05-25 09:42
841 查看
直接说明下我自己项目中的情况,如图:
外部嵌套任何一种refresh下拉控件之后,上方的viewpager左右滑动事件都受到影响,滑动不流畅,稍微有点向下的趋势就会触发刷新。
起初以为可能跟不同下拉控件也有关系
然后尝试了很多种方式,最后用到SwipeRefreshLayout才意识到然并卵(摊手),于是就SwipeRefreshLayout上做调整了。
中间试过很多网上的事件分发,子控件的touch事件拦截什么的,可能由于我的界面多重嵌套问题,根 本 没 用,敲想哭的,然后在http://blog.csdn.net/u010386612/article/details/50548977看到他的自定义SwipeRefreshLayout。
是挺好用的哈,viewpager左右滑确实很流畅,但是在子pager上下拉时还是出现只能偶尔拉下来的情况,于是自己又添加了子pager的touch事件,终于没问题了,呼~
外部嵌套任何一种refresh下拉控件之后,上方的viewpager左右滑动事件都受到影响,滑动不流畅,稍微有点向下的趋势就会触发刷新。
起初以为可能跟不同下拉控件也有关系
然后尝试了很多种方式,最后用到SwipeRefreshLayout才意识到然并卵(摊手),于是就SwipeRefreshLayout上做调整了。
中间试过很多网上的事件分发,子控件的touch事件拦截什么的,可能由于我的界面多重嵌套问题,根 本 没 用,敲想哭的,然后在http://blog.csdn.net/u010386612/article/details/50548977看到他的自定义SwipeRefreshLayout。
1 public class VpSwipeRefreshLayout extends SwipeRefreshLayout { 2 3 private float startY; 4 private float startX; 5 // 记录viewPager是否拖拽的标记 6 private boolean mIsVpDragger; 7 private final int mTouchSlop; 8 9 public VpSwipeRefreshLayout(Context context, AttributeSet attrs) { 10 super(context, attrs); 11 mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); 12 } 13 14 @Override 15 public boolean onInterceptTouchEvent(MotionEvent ev) { 16 int action = ev.getAction(); 17 switch (action) { 18 case MotionEvent.ACTION_DOWN: 19 // 记录手指按下的位置 20 startY = ev.getY(); 21 startX = ev.getX(); 22 // 初始化标记 23 mIsVpDragger = false; 24 break; 25 case MotionEvent.ACTION_MOVE: 26 // 如果viewpager正在拖拽中,那么不拦截它的事件,直接return false; 27 if(mIsVpDragger) { 28 return false; 29 } 30 31 // 获取当前手指位置 32 float endY = ev.getY(); 33 float endX = ev.getX(); 34 float distanceX = Math.abs(endX - startX); 35 float distanceY = Math.abs(endY - startY); 36 // 如果X轴位移大于Y轴位移,那么将事件交给viewPager处理。 37 if(distanceX > mTouchSlop && distanceX > distanceY) { 38 mIsVpDragger = true; 39 return false; 40 } 41 break; 42 case MotionEvent.ACTION_UP: 43 case MotionEvent.ACTION_CANCEL: 44 // 初始化标记 45 mIsVpDragger = false; 46 break; 47 } 48 // 如果是Y轴位移大于X轴,事件交给swipeRefreshLayout处理。 49 return super.onInterceptTouchEvent(ev); 50 } 51 }
是挺好用的哈,viewpager左右滑确实很流畅,但是在子pager上下拉时还是出现只能偶尔拉下来的情况,于是自己又添加了子pager的touch事件,终于没问题了,呼~
1 vp_pet.setOnTouchListener(new View.OnTouchListener() { 2 @Override 3 public boolean onTouch(View v, MotionEvent event) { 4 switch (event.getAction()) { 5 case MotionEvent.ACTION_DOWN: 6 // 记录手指按下的位置 7 startY = event.getY(); 8 startX = event.getX(); 9 break; 10 case MotionEvent.ACTION_MOVE: 11 // 获取当前手指位置 12 float endY = event.getY(); 13 float endX = event.getX(); 14 float distanceX = Math.abs(endX - startX); 15 float distanceY = Math.abs(endY - startY); 16 // 如果X轴位移大于Y轴位移,那么将事件交给viewPager处理。 17 if(distanceX > distanceY) { 18 refreshLayout.setEnabled(false); 19 } 20 break; 21 case MotionEvent.ACTION_UP: 22 case MotionEvent.ACTION_CANCEL: 23 refreshLayout.setEnabled(true); 24 break; 25 } 26 return false; 27 } 28 });
相关文章推荐
- Android解决ViewPager嵌套Fragment,Fragment嵌套ViewPager滑动冲突
- Android Listview嵌套viewpager 滑动冲突解决
- Android嵌套滑动控件的冲突解决和ViewPager适配当前子控件高度不留空白的办法
- 解决android中viewpager和内嵌html滑动事件冲突
- Android中解决ListView嵌套Viewpager时,滑动事件冲突的方法
- Android嵌套滑动控件的冲突解决和ViewPager适配当前子控件高度不留空白的办法
- Android 中SwipeRefreshLayout与ViewPager滑动事件冲突解决方法
- 复制AItsuki的Android:SwipeRefreshLayout和ViewPager滑动冲突的原因和正确的解决方式
- 完美解决Android里面scrollview嵌套及listview嵌套viewpager的滑动冲突问题的简单方法
- Android listview viewpager解决冲突 滑动
- [Android] Viewpager 与 Google map v2 冲突,导致地图不能左右滑动解决
- Android listview viewpager解决冲突 滑动
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
- Android ViewPager嵌套ViewPager滑动冲突的解决方法
- Android中解决ListView嵌套Viewpager时,滑动事件冲突的方法
- Android中SwipeRefreshLayout和ViewPager左右滑动冲突的原因以及正确的解决方法
- Android ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题解决方案
- Android listview viewpager解决冲突 滑动
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
- MPAndroidChart在ViewPager+Fragment滑动冲突解决