ViewPager一屏显示多个item,及边缘滑动事件优化
关于ViewPager显示两边的item方法,网络上是方法都在ViewPager外包一个Layout,
然后设置ViewPager和外面的Layout的clipChildren="false"。
ViewPager再设置layout_marginLeft,layout_marginRIght,以留出空间来显示两边的item.
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:id="@+id/viewPagerContainer" 4 android:layout_height="match_parent" 5 android:background="#EEEEEE" 6 android:clipChildren="false" 7 android:orientation="vertical" > 8 9 <android.support.v4.view.ViewPager 10 android:id="@+id/viewpage" 11 android:layout_width="match_parent" 12 android:layout_height="match_parent" 13 android:layout_marginLeft="80dp" 14 android:layout_marginRight="80dp" 15 android:clipChildren="false" /> 16 17 </LinearLayout>
这种方法有两个缺点:
1、手指从两边的item滑动时,不能切换page,因为两边的item并不在ViewPager的范围内。
2、在4.2和以下的系统滑动会出现两边的item没有一起滑动(父Layout没有刷新),据说要关闭硬件加速,笔者没试过。
下面介绍另一种方法。
笔者使用的v4包版本是23.3,不保证23.3以下的版本有效
1 <android.support.v4.view.ViewPager 2 android:id="@+id/viewpage" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:paddingLeft="80dp" 6 android:paddingRight="80dp" 7 android:clipToPadding="false"
这里只是把marginLeft和marginRight换成了paddingLeft和paddingRight,clipChildren换成了clipToPadding。
就是这么简单,就解决了第一个方法的两个缺点。
至于为什么,看ViewPager的源码就知道了。
下面是ViewPager的onMeasure里的部分代码:
1 setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), 2 getDefaultSize(0, heightMeasureSpec)); 3 4 final int measuredWidth = getMeasuredWidth(); 5 final int maxGutterSize = measuredWidth / 10; 6 mGutterSize = Math.min(maxGutterSize, mDefaultGutterSize); 7 8 // Children are just made to fill our space. 9 int childWidthSize = measuredWidth - getPaddingLeft() - getPaddingRight(); 10 int childHeightSize = getMeasuredHeight() - getPaddingTop() - getPaddingBottom();
其中,默认情况下,childWidthSize就是页面item的宽度了,等于ViewPager的宽度减去左右Padding。
我们给ViewPager设置了左右Padding,页面item的宽度就变小了,左右的item也就显示出来了,但要设置ViewPager的clipToPadding=false才行。
另外,设置item的间距,viewPager.setPageMargin(10);
两个ViewPager嵌套时
当两个viewPager嵌套时,正好要显示两边item的viewPager是内层View时,当手指在接近屏幕边缘滑动时,比如,在右边缘左滑来显示内层ViewPager右边的内容时,会发现内层的ViewPager没有切换,而是切换了父ViewPager的页面。
解决方法是:
1 public static void clearGutterSize(ViewPager viewPager) { 2 try { 3 Field field = ViewPager.class.getDeclaredField("mDefaultGutterSize"); 4 field.setAccessible(true); 5 field.set(viewPager, 0); 6 7 viewPager.requestLayout(); 8 } catch (Exception e) { 9 Log.d("MyViewPager", "#clearGutterSize:", e); 10 } 11 }
内层和外层两个viewPager都要clearGutterSize
clearGutterSize(parentViewPager)
clearGutterSize(innerViewPager)
转自:http://blog.csdn.net/asia_deng/article/details/70176393
转载于:https://www.cnblogs.com/Sharley/p/8532505.html
ViewPager一屏显示多个item,及边缘滑动事件优化相关推荐
- ViewPager系列之ViewPager一屏显示多个子页面
from :http://blog.csdn.net/JM_beizi/article/details/51297605 ViewPager一屏显示多个子页面,常见的有两种形式: 1.当前展示的页面右 ...
- ViewPager单页显示3个item
https://www.cnblogs.com/anni-qianqian/p/6801778.html 转载于:https://www.cnblogs.com/Oldz/p/10283749.htm ...
- html表格全屏显示,tableView滑动全屏显示
今天要分享的一个效果是在一个页面弹出视图展示一个tableview,然后手指滑动tableview时,视图随着tableview偏移量增加而慢慢增加,到达临界时,全屏显示,然后再次向下滑动时,当偏移量 ...
- android recyclerview 横向item 宽度,RecyclerView的item宽度不能全屏显示及线性布局与grid布局切换混乱解决方法...
1.RecyclerView的Item宽度不能全屏显示 出现这种的原因有两种: 1.第一种是在adapter中加载inflater时parent传入为null 2.如果第一种不行,第二种原因就是在Re ...
- 设置Dialog全屏显示(转)
昨天有人问怎样让Dialog全屏显示? 默认的Dialog是不能全屏的. 也就是怎么设置Dialog的Layout都无用的. 有一个地方能够设置. 就是. . . . 看代码直观. 先设置一个styl ...
- Android隐藏标题栏,全屏显示
Android 1.5测试通过 只需在以下代码中的,setCurrentView();之前调用即可 http://hi.baidu.com/wishwingliao/blog/item/38feb71 ...
- QT 实现滚屏显示多张漂亮美眉图片(可放大缩小)
作为新手小白的一些分享....... 其中一部分功能要求显示多张图片,如果图片总高度超过工具窗口的高度就要有滚动条出现,实现滚屏的效果,网上这部分内容少之又少,我就把效果和代码都贴出来供大家参考. 想 ...
- 解决 Android APP 启动页白屏问题及如何实现全屏显示
目录 一.白屏原因分析 二.解决白屏方案 方案一.提供 .png 背景图 方案二.使用 Layout-list 制作背景 1. 制作替代白屏的背景:bg_splash.xml 2. 将 bg_spl ...
- android Activity全屏显示
设置Activity全屏显示的两种方式: 1.在Activity中动态的设置 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().se ...
最新文章
- ubuntu16.04上安装valgrind
- 洛谷 P1111 修复公路(最小生成树)
- python环境设置_MacOS中的Python(和NumPy)开发环境设置
- 40岁的程序员还能找到工作吗_如果程序员已经到三十岁了,那他还能找到满意的工作吗?...
- Qt Quick测试
- LeetCode 多线程 1115. 交替打印FooBar
- java流行的测试框架调研+市面上书籍调研
- python模型的属性是什么_Python的自定义属性访问跟描述器以及ORM模型的简单介绍...
- 怎么在activity里面操作listView的item里的组件的点击事件
- linux nightshift调整,iOS9.3夜间模式怎么设置?iOS9.3 Night Shift设置教程
- 程门立雪的故事,成语程门立雪的主人公是谁?
- 训练集与测试集分布差距
- 在Git项目中使用pre-commit统一管理hooks
- liunx版pgadmin3 source code安装
- 软件测试用例篇总结概述
- 使用win7 快捷键
- zigbee网关 CC2530 zstack用手机显示终端传来的lm75a温度传感器的值
- html二级菜单:DIV+CSS制作二级菜单(横排二级下拉菜单)以及二级菜单出现错位怎么解决
- (转)逃脱者可获生机(上)
- kotlin用it还是this?
热门文章
- [20170420]关于延迟块清除3.txt
- [Android]Android端ORM框架——RapidORM(v1.0)
- dmz“非军事化区”
- 很实用但经常忘的小常识
- 2019BATJ面试题汇总详解:MyBatis+MySQL+Spring+Redis+多线程
- vue eventBus 跳坑的办法
- Zabbix 3.2.6通过ODBC监控MySQLOracle
- 深入理解 Laravel Eloquent(三)——模型间关系(关联)
- 分布式缓存系统Memcached简介与实践(.NET memcached client library)
- Android - Manifest 文件 详解