package com.streamlet.common.widget; import android.content.Context; import android.support.v4.widget.SwipeRefreshLayout; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewConfiguration; 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); } }