滑动事件冲突:
1.ViewPager与ListView之间的冲突:
解决方法一:
在ViewPager的OnPageChanged事件中添加两句话即可:
private void viewPagerListener() {
// TODO Auto-generated method stub
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// 本页滑动完成之后,释放截取触摸事件的能力
viewPager.getParent().requestDisallowInterceptTouchEvent(false);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// 从上到下移动
}
@Override
public void onPageScrollStateChanged(int arg0) {
// 状态改变的时候,获取截取触摸事件的能力
viewPager.getParent().requestDisallowInterceptTouchEvent(true);
}
});
}
解决方法二:
在给ViewPager添加触摸事件,在触摸事件里面进行操作:
float xDown;
float yDown;
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
xDown = event.getX();
yDown = event.getY();
break;
case MotionEvent.ACTION_MOVE:
if(Math.abs(event.getX() - xDown) > Math.abs(event.getY() - yDown)){
viewPager.getParent().requestDisallowInterceptTouchEvent(true);
}else{
viewPager.getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
viewPager.getParent().requestDisallowInterceptTouchEvent(false);
break;
default:
break;
}
return false;
}
注意:方法二中当垂直滑动的距离大于水平滑动的距离时,ListView就会截取触摸事件,想要ViewPager在滑动的时候,LIstView不 能获取触摸事件,则用方法一;具体情况根据业务需求而定;
2.ViewPager与侧滑菜单之间的冲突:
在之前的博客中已经提到过,获取一个控件坐标的方法。因此,ViewPager与侧滑菜单之间冲突解决方法就是:
1)获取ViewPager在视图中的坐标位置;
2)添加判断:
如果触摸位置在ViewPager的纵轴坐标之内,则调用viewPager.getParent().requestDisallowInterceptTouchEvent(true)方法获得截取事件的能力;
如果触摸位置在ViewPager的纵轴坐标之外,则调用 viewPager.getParent().requestDisallowInterceptTouchEvent(false)方法让其失去截取事件的能力;