ViewPager属于父布局,View属于子布局;
触摸事件是先到父View,再到子View,所以可以让ViewPager取消拦截事件;
public class ComposeViewPager extends ViewPager { private String TAG = "ComposeViewPager"; public ComposeViewPager(Context context) { this(context, null); } public ComposeViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { final int action = ev.getAction(); if(action == MotionEvent.ACTION_MOVE){ return false; //false表示不拦截 } return super.onInterceptTouchEvent(ev); } }
或者在子View中重写函数,告诉父View不要拦截,让自己处理:
@Override public boolean dispatchTouchEvent(MotionEvent ev) { //处理与Viewpager的事件冲突 getParent().requestDisallowInterceptTouchEvent(true); //true表示让自己处理,不要拦截 return super.dispatchTouchEvent(ev); }