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