本博客单纯作为本人学习使用,若有幸帮到您不胜荣幸。在listview加入viewpager头布局时会出现滑动冲突的问题,若用v4包下的viewpager,我发现手指斜滑的时候viewpager并不会左右切换,这是因为listview替他处理了触摸事件。我从这里入手解决问题,当手指滑动的横向距离(motionEvent.getX())大于纵向距离(motionEvent.getY())时,我让父组件不拦截touchEvent触摸事件。
<span style="white-space:pre"> </span>getParent().requestDisallowInterceptTouchEvent(true);
上面这个方法若为true的意思是子view不想父view去拦截触摸事件,下面是studio的文档注释,大家可以自己看下。
废话不多说贴上viewpager的代码
public class CustomViewPager extends ViewPager {
private float downX;
private float downY;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
downX = ev.getX();
downY = ev.getY();
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
if(Math.abs(downX -ev.getX())>Math.abs(downY -ev.getY())){
getParent().requestDisallowInterceptTouchEvent(true);
}else{
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return super.dispatchTouchEvent(ev);
}
}
整个Demo下载