android vew(4) 滑动冲突

滑动冲突

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

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

解决滑动冲突,主要是通过重写父容器的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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值