VeiwPager中滑动事件冲突解决方案

来源:互联网 发布:装修方案软件 编辑:程序博客网 时间:2024/05/16 00:55

滑动事件冲突:

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)方法让其失去截取事件的能力;

1 0
原创粉丝点击