viewpager 动态改变滑动事件,并且改变页面可滑动的响应有效区域

https://github.com/dl10210950/TabViewPagerIndicator

viewPager 动态改变滑动事件,并且改变页面可滑动的有效区域
MainActivit.java
重写dispatchTouchEvent 事件,分发到Fragment中

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
            if(mFragCurrent instanceof BaseUsbFragment){
                ((BaseUsbFragment) mFragCurrent).dispatchTouchEvent(ev);
            }
        return super.dispatchTouchEvent(ev);
    }

BaseFragment.java
添加如下方法

````
  public void dispatchTouchEvent(MotionEvent ev) {
    for (ITouchListener listener : touchListeners) {
        if (listener != null) {
          //  LogUtil.i("dispatchTouchEvent ="+listener.onTouchEvent(ev));
            mUsbViewPager.setIsScanScroll(listener.onTouchEvent(ev));
        }
    }
}
viewPager.java 修改分发事件
public class CustomViewPager extends ViewPager {

private boolean isCanScroll =  true;
public CustomViewPager(Context context) {
    super(context);
}

public CustomViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public void setIsScanScroll(boolean isCanScroll) {
    this.isCanScroll = isCanScroll;
}

@Override
public void scrollTo(int x, int y) {
    super.scrollTo(x, y);
}
@Override
public boolean onTouchEvent(MotionEvent arg0) {
    // TODO Auto-generated method stub
    if (isCanScroll) {
        return super.onTouchEvent(arg0);
    } else {
        return false;
    }

}

@Override
public void setCurrentItem(int item, boolean smoothScroll) {
    // TODO Auto-generated method stub
    super.setCurrentItem(item, smoothScroll);
}

@Override
public void setCurrentItem(int item) {
    // TODO Auto-generated method stub
    super.setCurrentItem(item);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
    // 是否允许滑动
    if (isCanScroll) {
        return super.onInterceptTouchEvent(arg0);
    } else {
        return false;
    }

}

}

public interface ITouchListener {
    boolean onTouchEvent(MotionEvent event);
}

ViewPager 中添加的Fragment,动态改变页面滑动事件,并且改变滑动响应的区域

ChildFragment 实现ITouchListener 接口

  @Override
    public boolean onTouchEvent(MotionEvent event) {
        // LogUtil.i("isScroll ="+isScroll);

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mDownX = event.getX();
                break;
            case MotionEvent.ACTION_MOVE:
                mTargetX = event.getX(); 
                break;
            case MotionEvent.ACTION_UP:
                mTargetX = event.getX();
                break;
        }
        //只能响应从两边滑动切换页面
        if (mDownX >= 1180 || mDownX <= 100) {
            if (isScroll) {
                return true;
            } else {
                return false;
            }

        } else {
            return false;
        }
    }

在这里插入图片描述在这里插入图片描述

发布了83 篇原创文章 · 获赞 19 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_38148680/article/details/101397421