解决内部ViewPager不能向左滑动的bug
2017-05-06 15:35
417 查看
今天在做一个商城app的时候,顶部使用的是ViewPager进行轮播图显示的,外部集成的是SlidingMenu和ViewPager,当内部的第一个ViewPager向左滑动的时候,直接打开了左侧菜单而不能实现图片的切换,这个时候就要自定义ViewPager,重写dispatchTouchEvent方法,请求父视图不要拦截事件。但是这样做又带来了一个新的问题,当反拦截以后,外部的SlidingMenu和ViewPager将不再响应事件。所以反拦截是有条件的。一.竖直方向滑动,不做处理
设置是否拦截事件为 getParent().requestDisallowInterceptTouchEvent(false);
二.水平方向滑动1.当滑动到第一个页面,并且方向是从左到右的滑动
endX - startX > 0 那么方向就是:从左往右滑动 getParent().requestDisallowInterceptTouchEvent(false);
2.当滑动到最后一个页面的时候,并且方向是从右到左滑动endX - startX < 0 那么方向就是:从右往左滑动
getParent().requestDisallowInterceptTouchEvent(false);
3.其他情况getParent().requestDisallowInterceptTouchEvent(true);具体代码如下 private float lastX;
private float lastY;
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
switch (ev.getAction())
{
case MotionEvent.ACTION_DOWN:
// down的时候要先把事件传到最里面 然后根据情况是否是父亲拦截
getParent().requestDisallowInterceptTouchEvent(true);
lastX = ev.getRawX();
lastY = ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:
float dx = ev.getRawX() - lastX;
float dy = ev.getRawY() - lastY;
//判断是水平滑动还是垂直滑动
if (Math.abs(dx) > Math.abs(dy))
{
//水平滑动
if (getCurrentItem() == 0 && dx > 0)
{
//从左向右滑 不请求
getParent().requestDisallowInterceptTouchEvent(false);
}
else if (getCurrentItem() == getAdapter().getCount() - 1 && dx < 0)
{
getParent().requestDisallowInterceptTouchEvent(false);
}
else
{
getParent().requestDisallowInterceptTouchEvent(true);
}
}
else
{
//垂直滑动 不请求
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
break;
}
return super.dispatchTouchEvent(ev);
}这样顶部ViewPager及外面的SlidingMenu和ViewPager切换就正常了。
设置是否拦截事件为 getParent().requestDisallowInterceptTouchEvent(false);
二.水平方向滑动1.当滑动到第一个页面,并且方向是从左到右的滑动
endX - startX > 0 那么方向就是:从左往右滑动 getParent().requestDisallowInterceptTouchEvent(false);
2.当滑动到最后一个页面的时候,并且方向是从右到左滑动endX - startX < 0 那么方向就是:从右往左滑动
getParent().requestDisallowInterceptTouchEvent(false);
3.其他情况getParent().requestDisallowInterceptTouchEvent(true);具体代码如下 private float lastX;
private float lastY;
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
switch (ev.getAction())
{
case MotionEvent.ACTION_DOWN:
// down的时候要先把事件传到最里面 然后根据情况是否是父亲拦截
getParent().requestDisallowInterceptTouchEvent(true);
lastX = ev.getRawX();
lastY = ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:
float dx = ev.getRawX() - lastX;
float dy = ev.getRawY() - lastY;
//判断是水平滑动还是垂直滑动
if (Math.abs(dx) > Math.abs(dy))
{
//水平滑动
if (getCurrentItem() == 0 && dx > 0)
{
//从左向右滑 不请求
getParent().requestDisallowInterceptTouchEvent(false);
}
else if (getCurrentItem() == getAdapter().getCount() - 1 && dx < 0)
{
getParent().requestDisallowInterceptTouchEvent(false);
}
else
{
getParent().requestDisallowInterceptTouchEvent(true);
}
}
else
{
//垂直滑动 不请求
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
break;
}
return super.dispatchTouchEvent(ev);
}这样顶部ViewPager及外面的SlidingMenu和ViewPager切换就正常了。
相关文章推荐
- 对于ViewPager中嵌套的Viewpager不能响应滑动事件的解决方法
- 解决ViewPager嵌套后子ViewPager不能滑动的问题
- [重写开源框架源码]InfiniteViewPager在ScrollView中不能竖直滑动问题解决
- ViewPager嵌套时内部的ViewPager不能滑动
- 解决listview上的viewpager不能滑动问题
- 解决ViewPager嵌套后子ViewPager不能滑动问题
- ViewPager嵌套ViewPager不能响应滑动事件解决方法
- 解决含有Textview布局在viewpager等横向滑动中滑动不流畅的bug
- ViewPager嵌套时内部的ViewPager不能滑动
- Android解决ViewPager页面滑动空白bug和图片点击bug
- Android解决ViewPager页面滑动空白bug和图片点击bug
- 解决ScrollView嵌套ViewPager,导致ViewPager不能滑动的问题
- [Android] Viewpager 与 Google map v2 冲突,导致地图不能左右滑动解决
- ViewPager嵌套ViewPager不能响应滑动事件解决方法
- ScrollView嵌入ViewPager 滑动冲突的解决方法
- 解决Viewpager满屏不能自适应填充内容的三种办法
- Android使用Fragment,不能得到Fragment内部控件,findViewById()结果是Null--已经解决
- 备忘-Android ViewPager 与Gallery滑动冲突解决方法
- 【解决ViewPager在大屏上滑动不流畅】 设置ViewPager滑动翻页距离
- 解决在scrollview上下滑动嵌套scrollview,viewpager水平滑动时的抖动问题