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;
        }
    }

在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章