美文网首页
使用viewpager时,关于事件拦截处理的思考

使用viewpager时,关于事件拦截处理的思考

作者: 卖梦为生_若愚 | 来源:发表于2017-06-22 15:38 被阅读0次

    public classTouchedViewPagerextendsViewPager

    {

    private floatmDownX;

    private floatmDownY;

    publicTouchedViewPager(Context context) {

    this(context, null);

    }

    publicTouchedViewPager(Context context,AttributeSet attrs) {

    super(context,attrs);

    }

    @Override

    public booleandispatchTouchEvent(MotionEvent ev)

    {

    intposition = getCurrentItem();

    intaction = ev.getAction();

    switch(action)

    {

    caseMotionEvent.ACTION_DOWN:

    // true: 孩子不想父容器拦截touch

    getParent().requestDisallowInterceptTouchEvent(true);

    mDownX= ev.getX();

    mDownY= ev.getY();

    break;

    caseMotionEvent.ACTION_MOVE:

    floatmoveX = ev.getX();

    floatmoveY = ev.getY();

    floatdiffX = moveX -mDownX;

    floatdiffY = moveY -mDownY;

    // 水平操作

    // 从左向右 ---> diffX > 0

    // 从右向左 ---> diffX <= 0

    // 如果是水平操作,才考虑要不要拦截

    if(Math.abs(diffX) > Math.abs(diffY))

    {

    if(position ==0)

    {

    // 1. 如果当前是第一页(打开菜单或是上级viewpager选中上一页)

    if(diffX >0)

    {

    // 1-1. 如果从左向右拖动,父容器自己去响应touch

    getParent().requestDisallowInterceptTouchEvent(false);

    }

    else

    {

    // 1-2. 如果从右向左拖动,自己响应

    getParent().requestDisallowInterceptTouchEvent(true);

    }

    }

    else if(position == getAdapter().getCount() -1)

    {

    // 2. 如果是最后一页,父容器自己去响应touch

    if(diffX >0)

    {

    // 2-1. 如果从左向右拖动,自己响应

    getParent().requestDisallowInterceptTouchEvent(true);

    }

    else

    {

    // 2-2. 如果从右向左拖动,父容器自己去响应touch

    getParent().requestDisallowInterceptTouchEvent(false);

    }

    }

    else

    {

    // 3. 中间页面,自己响应

    getParent().requestDisallowInterceptTouchEvent(true);

    }

    }

    else

    {

    getParent().requestDisallowInterceptTouchEvent(false);

    }

    break;

    caseMotionEvent.ACTION_UP:

    break;

    default:

    break;

    }

    return super.dispatchTouchEvent(ev);

    }

    }

    相关文章

      网友评论

          本文标题:使用viewpager时,关于事件拦截处理的思考

          本文链接:https://www.haomeiwen.com/subject/glefcxtx.html