自定义Activity布局的root控件,拦截触摸事件并拦截
拦截触摸事件函数onInterceptTouchEvent
event.getAction() == MotionEvent.ACTION_DOWN return true;Move Up 事件不再传递
父控件的onTouchEvent函数处理所有的滑动事件
注意一点onTouchEvent函数中event.getAction() == MotionEvent.ACTION_DOWN return true;这里如果返回false的,事件直接结束,Move Up事件不再传递。
public class SwipeBackFrameLayout extends FrameLayout { float eventX; private String TAG = SwipeBackFrameLayout.class.getName(); public SwipeBackFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { Log.d(TAG, "MotionEvent.ACTION_DOWN"); float eventX = event.getX(); if (eventX < 55) { return true; } break; } } return super.onInterceptTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { Log.d(TAG, "MotionEvent.ACTION_DOWN"); eventX = event.getX(); return true; } case MotionEvent.ACTION_MOVE: { Log.d(TAG, "MotionEvent.ACTION_MOVE"); float eventXM = event.getX(); float differenceXM = eventXM - eventX; if (differenceXM > 30) { ((Activity) getContext()).finish(); } return true; } case MotionEvent.ACTION_UP: { Log.d(TAG, "MotionEvent.ACTION_UP"); return true; } } return super.onTouchEvent(event); } }