ViewPager里面嵌套HorizontalListView或者自定义ViewGroup横向滑动事件冲突--解决

本文介绍了解决Android应用中Fragment与ViewPager滑动冲突的方法。通过使用ViewPager提供的requestDisallowInterceptTouchEvent()方法,在自定义ViewGroup的onTouchEvent()中进行事件拦截控制,实现了两者的协调工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中使用了fragment,如图:,上半部分是一个自定义的ViewGroup,可以左右滑动,使用了Viewpager。现在麻烦就来了,两个控件都是要左右滑动的,但是现在无法解决两者左右滑动事件的分发。在stackoverflow上面看到一个帖子:

public boolean onTouch(View v, MotionEvent event) {   

    switch (event.getAction()) {   

       case MotionEvent.ACTION_MOVE:    

         pager.requestDisallowInterceptTouchEvent(true);       

       break;   

    case MotionEvent.ACTION_UP: 

     case MotionEvent.ACTION_CANCEL:    

    pager.requestDisallowInterceptTouchEvent(false);   

     break;   

   }

}

ViewPager对外提供一个这样的方法requestDisallowInterceptTouchEvent();
于是我在自定义的ViewGroup的onTouchEvent()也用了这个方法,解决了这个问题:

具体代码:

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  v.requestDisallowInterceptTouchEvent(true);
  gestureDetector.onTouchEvent(event);

  if(event.getAction() == MotionEvent.ACTION_UP){
   handler.removeCallbacks(next);
   if(time>=500)
    handler.postDelayed(next, time);
   
   if(!fling){
    // 当用户停止拖动
    snapToDestination();
    v.requestDisallowInterceptTouchEvent(false);
   }
   fling = false;
  }
  if(event.getAction() == MotionEvent.ACTION_CANCEL){
   v.requestDisallowInterceptTouchEvent(false);
  }
  return true;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值