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