android vew(4) 滑动冲突

本文介绍了解决Android应用中滑动冲突的方法,特别是如何通过重写父容器的onInterceptTouchEvent事件来处理不同方向上的滑动行为。对于左右与上下滑动共存的情况,提供了具体的实现代码。

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

滑动冲突

情况一:外部支持左右滑动,内部支持上下滑动,滑动时就会出现只有一个能滑动。

情况二:都是支持左右滑动,但是要么只有一个能滑动,要么两个都在滑动。

解决滑动冲突,主要是通过重写父容器的onInterceptTouchEvent事件来解决。情况一可以通过判断水平方向和竖直方向哪个移动距离大来决定是上下滑,还是左右滑。情况二,则根据具体业务逻辑来决定。

由于是在父窗口中处理,这种方式称为外部拦截法。至于内部拦截法稍微复杂一些,这里只展示外部拦截法。

 

public boolean onInterceptTouchEvent(MotionEvent event){

   boolean intercepted = false;

   int x = (int) event.getX();

   int y = (int) event.getY();

   

   switch(event.getAction()){

      case MotionEvent.ACTION_DOWN:

    intercepted = false;

if(!mScroller.isFinished()){

   mScroller.abortAnimation();//优化滑动体验

intercepted = true;

}

break;

 case MotionEvent.ACTION_MOVE:

    int deltaX = x - mLastXintercept;

int deltaY = y - mLastYintercept;

if(Math.abs(deltaX) > Math.abs(deltaY)){//水平距离大父容器拦截此事件来处理滑动,否则子元素去处理滑动

   intercepted = true;

}else{

   intercepted = false;

}

break;

 case MotionEvent.ACTION_UP:

    intercepted = false;

break;

  default:

     break;

   }

   mLastXintercept = x;

   mLastYintercept = y;

   return intercepted;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值