Android 解决SwipeRefreshLayout和viewpager左右滑动和下来刷新的冲突
16lz
2021-01-23
/** * Created by qinwendou on 2018/7/2. */public class VpSwipeRefreshLayout extends SwipeRefreshLayout { private float startY; private float startX; // 记录viewPager是否拖拽的标记 private boolean mIsVpDragger; private int mTouchSlop; // private final int mTouchSlop; public VpSwipeRefreshLayout(Context context) { super(context); } public VpSwipeRefreshLayout(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: // 记录手指按下的位置 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); }}
直接使用即可。
更多相关文章
- 高德地图Android版SDK的应用(定位,添加自定义标记点)
- 关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记
- Android全屏模式,监听软键盘弹出事件。
- Android三种方法实现事件监听
- Android中RecyclerView简单的点击事件
- android典型监听事件实
- android 鼠标滚轮事件监听
- android处理Back键Home键和Menu键事件
- Android 手机切屏事件