正常来说如果TabHost中嵌套ViewPager 会导致ViewPager不能滑动出其他页面
首先我们先讲解下解决方法:
1.首先我们知道这肯定与事件分发机制有关
据我知道的有俩种可以拦截的方法
1) onInterceptTouchEvent() 这个方法是从外面控制里面
2)requestDisallowInterceptTouchEvent 这个方法是从里面控制外面
2.这次的解决方式是从里面控制外面
假如ViewPager里面有三个页面
第一步:我们要设置ViewPager的onTouch事件
第二步:要知道是向哪个方向滑
第三步:如果是向右滑 如果没有到达ViewPager的最后一页就不让Tabhost滑动 v.getParent().requestDisallowInterceptTouchEvent(true);
重要代码:
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x = event.getX();
break;
case MotionEvent.ACTION_MOVE:
int endX = (int) event.getX();
int dy = (int) (endX - x);
if (dy < 0) {
if (vp.getCurrentItem() == 2) {
v.getParent().requestDisallowInterceptTouchEvent(false);
} else {
v.getParent().requestDisallowInterceptTouchEvent(true);
}
} else {
v.getParent().requestDisallowInterceptTouchEvent(true);
}
break;
}
return false;
}
首先我们先讲解下解决方法:
1.首先我们知道这肯定与事件分发机制有关
据我知道的有俩种可以拦截的方法
1) onInterceptTouchEvent() 这个方法是从外面控制里面
2)requestDisallowInterceptTouchEvent 这个方法是从里面控制外面
2.这次的解决方式是从里面控制外面
假如ViewPager里面有三个页面
第一步:我们要设置ViewPager的onTouch事件
第二步:要知道是向哪个方向滑
第三步:如果是向右滑 如果没有到达ViewPager的最后一页就不让Tabhost滑动 v.getParent().requestDisallowInterceptTouchEvent(true);
重要代码:
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x = event.getX();
break;
case MotionEvent.ACTION_MOVE:
int endX = (int) event.getX();
int dy = (int) (endX - x);
if (dy < 0) {
if (vp.getCurrentItem() == 2) {
v.getParent().requestDisallowInterceptTouchEvent(false);
} else {
v.getParent().requestDisallowInterceptTouchEvent(true);
}
} else {
v.getParent().requestDisallowInterceptTouchEvent(true);
}
break;
}
return false;
}
本文介绍了解决TabHost嵌套ViewPager时ViewPager无法滑动到其他页面的问题。通过内部控制外部的方式,设置了ViewPager的onTouch事件,并判断滑动方向来控制TabHost是否允许滑动。

20

被折叠的 条评论
为什么被折叠?



