1.ViewPager嵌套HorizontalScrollView滑动冲突的解决办法,重写ViewPager
public class ZdyViewPage extends ViewPager { public ZdyViewPage(Context context) { super(context); } public ZdyViewPage(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected boolean canScroll(View v, boolean arg1, int arg2, int arg3, int arg4) { if (v instanceof HorizontalScrollView) { return true; } return super.canScroll(v, arg1, arg2, arg3, arg4); } }
2.ScrollView嵌套ViewPager滑动冲突的解决办法,重写ScrollView
public class NotifyingScrollView extends ScrollView { private Context mContext; /*避免Scroview和ViewPager控件冲突的解决办法*/ private boolean canScroll; private GestureDetector mGestureDetector; View.OnTouchListener mGestureListener; public NotifyingScrollView(Context context) { super(context); mContext = context; } public NotifyingScrollView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; mGestureDetector = new GestureDetector(new YScrollDetector()); canScroll = true; } public NotifyingScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; } /*避免Scroview和ViewPager控件冲突的解决办法*/ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_UP) canScroll = true; return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev); } class YScrollDetector extends SimpleOnGestureListener { @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if(canScroll) if (Math.abs(distanceY) >= Math.abs(distanceX)) canScroll = true; else canScroll = false; return canScroll; } } }
3.ListView嵌套ViewPager滑动冲突的解决办法,重写ListView
public class MyListview extends ListView { private Context mContext; public MyListview(Context context) { super(context); mContext = context; } public MyListview(Context context, AttributeSet attrs, Context mContext) { super(context, attrs); this.mContext = mContext; } public MyListview(Context context, AttributeSet attrs, int defStyle, Context mContext) { super(context, attrs, defStyle); this.mContext = mContext; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { super.onInterceptTouchEvent(ev); return false; } }
在开发中还会遇到很多的控件组合,大家有遇到过的希望都能把代码贴上来,大家共同学习!!!