android中viewpager,scrollview、listview的嵌套问题

转载 2014年01月16日 19:08:25

转 

google官方是不提倡在UI中嵌套可滚动控件,如ScrollView,ViewPager等,但有时候为了实现一定的效果也不得不用,其实很多知名App都是这样弄的。下面是我总结的两种嵌套情形。

一.当ScrollView中嵌套ViewPager的情形

这种比较常见,一般是在界面的最顶部放置一个ViewPager,用来展示图片还有一些文字说明,下面则是List,像之前版本的网易新闻客户端就是这样的效果。List滚动的同时ViewPager也会跟着滚动,这时候就要用到ScrollView中嵌套ViewPager。

由于ScrollView是垂直滚动的,ViewPager是水平滑动的。当在ViewPager上滑动的时候,如果在水平方向上的偏移量较垂直方向上的偏移量不是太大的时候,会有明显的ScrollView滚动问题,很影响用户体验。解决的方法我总结了两种:

1.用自定义ScrollView,通过覆写dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent等方法,来人为的控制TouchEvent。于是在网上搜了下,从点击打开链接找到了一个方法。覆写ScrollView的onInterceptTouchEvent方法,通过对水平和垂直方向上的偏移量进行计算,让ScrollView决定是拦截TouchEvent还是传递给子View。试了下,效果挺好的,代码如下:

[java] view plaincopy
  1. @Override    
  2.     public boolean onInterceptTouchEvent(MotionEvent ev) {  
  3.           
  4.         switch (ev.getAction()) {    
  5.             case MotionEvent.ACTION_DOWN:    
  6.                 xDistance = yDistance = 0f;    
  7.                 xLast = ev.getX();    
  8.                 yLast = ev.getY();    
  9.                 break;    
  10.             case MotionEvent.ACTION_MOVE:    
  11.                 final float curX = ev.getX();    
  12.                 final float curY = ev.getY();    
  13.                     
  14.                 xDistance += Math.abs(curX - xLast);    
  15.                 yDistance += Math.abs(curY - yLast);    
  16.                 xLast = curX;    
  17.                 yLast = curY;    
  18.                     
  19.                 if(xDistance > yDistance){    
  20.                     return false;    
  21.                 }      
  22.         }  
  23.     
  24.         return super.onInterceptTouchEvent(ev);    
  25.     }  
2.自定义ViewPager,覆写dispatchTouchEvent方法。该方法来自:点击打开链接代码如下:

[java] view plaincopy
  1. boolean ret = super.dispatchTouchEvent(ev);  
  2.           if(ret)   
  3.           {  
  4.             requestDisallowInterceptTouchEvent(true);  
  5.           }  
  6.           return ret;  
当ret为true时,就设置不要父控件及祖先控件不允许拦截TouchEvent。该请求会被传递给该ViewPager的所有父控件。并且会持续从ACTION_DOWN到ACTION_UP整个过程。我感觉这种方法也简单些,效果也很好。


二.ViewPager中嵌套ScrollView,ScrollView中嵌套ViewPager

这种情况下,在ScrollView中嵌套的子ViewPager上滑动的时候该ViewPager并不会切换,而是切换父ViewPager。这时候,只能自定义ViewPager了,方法跟情形一中的第二种方法是一样的,效果也挺好的。使该子ViewPager获得TouchEvent而不传递给父及祖先控件。

Android ScrollView嵌套Viewpager嵌套ListView切换时到顶部或位置改变问题解决

Android SrrollView嵌套Viewpager嵌套ListView切换时到顶部或位置改变问题解决好了,思想+代码Activity:android:focusable="true" andr...
  • aierJun
  • aierJun
  • 2017年03月21日 13:13
  • 984

ScrollView嵌套Viewpager嵌套ListView时遇到的问题

界面显示不全,并且需要将TabLayout跟随ListView往上移动 当滑动Viewpager时ListView会突然跳到屏幕的顶部 当内容往上滑动,使TabLayout悬浮在顶部...
  • Stephen2Wong
  • Stephen2Wong
  • 2016年12月21日 15:40
  • 964

Android在ScrollView中嵌套ViewPager以及ListView的可能出现的问题以及解决方案

我们在实际开发一个款Android App时,经常会遇到如下图所示的需求: 从上面gif图片可以看出,在一个页面的最上方有一个首页轮播的效果,在首页轮播的下方又会有一个ListView或者是G...
  • zxm317122667
  • zxm317122667
  • 2016年03月17日 18:14
  • 6977

ScrollView ViewPager ListView三者共存

ScrollView嵌套ViewPager,然后Viewpager又嵌套ListView ScrollView嵌套Viewpager,viewPager中再嵌套RecyclerView > Scro...
  • ShareUs
  • ShareUs
  • 2016年10月19日 15:12
  • 1023

Android:ScrollView中嵌套ViewPager和ListView示例

引言: 我们在实际开发一个款Android App时,经常会遇到Scrollview和ViewPager和ListView同时使用的场景,如下图所示的需求: 下面我们通过代码来模拟一下这种场景...
  • iblade
  • iblade
  • 2016年03月30日 17:14
  • 3404

ScrollView嵌套ViewPager自适应高度,图片高度小的会显示空白

最近项目中遇到ScrollView嵌套ViewPager,ViewPager中存放的是ImagView,要求是,ImagView高度不定,接下来就是各种方法尝试,比较普遍的方式就是自定义一个viewp...
  • lzq520210
  • lzq520210
  • 2016年11月17日 11:41
  • 2035

解决ScrollView嵌套ViewPage, 并且ViewPage里面嵌套了ListView的滑动冲突原理

解决ScrollView嵌套ViewPage, 并且ViewPage里面嵌套了ListView的滑动冲突原理
  • xufeifandj
  • xufeifandj
  • 2016年08月02日 15:04
  • 1457

ScrollView+TabLayout+ViewPager+ListView复杂滑动嵌套、上拉加载

先来看看要实现布局的样式哈,我感觉手动画的更详细嘿嘿。 要实现的就是这样的复杂布局,这里面涉及到各种嵌套滑动的冲突,还涉及ListView的上拉加载,接下来一点点开始哈。一、ScrollView嵌套...
  • hello_1s
  • hello_1s
  • 2016年12月05日 18:32
  • 3605

ScrollView嵌套ViewPager内容显示不全的问题

最近做项目,遇到个问题,ScrollView嵌套ViewPager来展示数据,在第一次启动的时候,需要从网上获取数据,获取之后ViewPager里面的布局显示不全,可以上下滑动,但是下面少了一块 在...
  • lay0702
  • lay0702
  • 2016年05月20日 09:30
  • 2277

ScrollView嵌套listView和Viewpager后的显示不全解决

由于项目要求,需要在Viewpager中有一个是片段是ScrollView,而scrollView中需要嵌套另外的ViewPager跟其他如listView的视图,这里先解决下scrollView中嵌...
  • YE1208030123
  • YE1208030123
  • 2015年12月07日 17:53
  • 3200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android中viewpager,scrollview、listview的嵌套问题
举报原因:
原因补充:

(最多只允许输入30个字)