ViewPager一屏显示多个item,及边缘滑动事件优化
关于ViewPager显示两边的item方法,网络上是方法都在ViewPager外包一个Layout,
然后设置ViewPager和外面的Layout的clipChildren="false"。
ViewPager再设置layout_marginLeft,layout_marginRIght,以留出空间来显示两边的item.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/viewPagerContainer"
android:layout_height="match_parent"
android:background="#EEEEEE"
android:clipChildren="false"
android:orientation="vertical" > <android.support.v4.view.ViewPager
android:id="@+id/viewpage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="80dp"
android:layout_marginRight="80dp"
android:clipChildren="false" /> </LinearLayout>
这种方法有两个缺点:
1、手指从两边的item滑动时,不能切换page,因为两边的item并不在ViewPager的范围内。
2、在4.2和以下的系统滑动会出现两边的item没有一起滑动(父Layout没有刷新),据说要关闭硬件加速,笔者没试过。
下面介绍另一种方法。
笔者使用的v4包版本是23.3,不保证23.3以下的版本有效
<android.support.v4.view.ViewPager
android:id="@+id/viewpage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="80dp"
android:paddingRight="80dp"
android:clipToPadding="false"
这里只是把marginLeft和marginRight换成了paddingLeft和paddingRight,clipChildren换成了clipToPadding。
就是这么简单,就解决了第一个方法的两个缺点。
至于为什么,看ViewPager的源码就知道了。
下面是ViewPager的onMeasure里的部分代码:
其中,默认情况下,childWidthSize就是页面item的宽度了,等于ViewPager的宽度减去左右Padding。
我们给ViewPager设置了左右Padding,页面item的宽度就变小了,左右的item也就显示出来了,但要设置ViewPager的clipToPadding=false才行。
另外,设置item的间距,viewPager.setPageMargin(10);
两个ViewPager嵌套时
当两个viewPager嵌套时,正好要显示两边item的viewPager是内层View时,当手指在接近屏幕边缘滑动时,比如,在右边缘左滑来显示内层ViewPager右边的内容时,会发现内层的ViewPager没有切换,而是切换了父ViewPager的页面。
解决方法是:
public static void clearGutterSize(ViewPager viewPager) {
try {
Field field = ViewPager.class.getDeclaredField("mDefaultGutterSize");
field.setAccessible(true);
field.set(viewPager, );
viewPager.requestLayout();
} catch (Exception e) {
Log.d("MyViewPager", "#clearGutterSize:", e);
}
}
内层和外层两个viewPager都要clearGutterSize
转自:http://blog.csdn.net/asia_deng/article/details/70176393
ViewPager一屏显示多个item,及边缘滑动事件优化的更多相关文章
- 【转】ViewPager 一屏显示多个子页面
一.概述 项目中遇到一个需求:ViewPager 一屏显示多个子页面.因为之前没有做过这样的界面,所以经历了些许小插曲,特以记之! 主要内容来自: http://blog.csdn.net/JM_be ...
- Android ViewPager系列之ViewPager一屏显示多个子页面
ViewPager一屏显示多个子页面,常见的有两种形式: 1.当前展示的页面右侧显示一部分下个页面的内容 2.当前页面居中,左右两边分别显示上一个页面.下一个页面 第 1 种表现形式的实现代码 其实这 ...
- ViewPager单页显示3个item
原文地址:https://github.com/hongyangAndroid/MagicViewPager/wiki MagicViewPager 单页显示3个Item的ViewPager炫酷切换效 ...
- 【转】ViewPager实现一个页面多个Item的显示
转自:http://billyyuan.iteye.com/blog/1941538 ViewPager实现一个页面多个Item的显示 博客分类: android 代码在: https://cod ...
- Android开发之全屏显示的两种方法
1.通过修改清单文件中Theme,实现全屏 <application android:name=".MyApplication" android:allowBackup=&q ...
- android启动画面隐藏状态栏全屏显示
1.在根部局给一个id,然后直接设置就行了layout.setSystemUiVisibility(View.INVISIBLE); 状态栏就没有了. 2.如果你只是想改变状态栏颜色的也可以 //5. ...
- 解决Viewpager满屏不能自适应填充内容的三种办法
由于排版问题,本人博客园同名博文地址为:http://www.cnblogs.com/bill-technology/articles/3143667.html 很多Android开发者在使用View ...
- Android Activity 去掉标题栏及全屏显示
默认生成的活动(Activity)界面中包含标题栏,并带有状态栏.有时不需要这两个控件. 1.去掉标题栏 (三种方法) a:在setContentView()方法前 添加:requestWindowF ...
- echarts 饼图 + 全屏显示
效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
随机推荐
- 一条SQL语句中算日销售额和月销售额
刚刚做项目的时候用到的 用户表:用户ID,用户名,余额 流水表:时间,用户ID,用户名,类型(0充值,1消费),变更金额 现在要查每个用户的日销售额和月销售额,本来最简单的方法是先把所有用户查出来,然 ...
- Atitit 软件项目系统托盘图标解决方案
Atitit 软件项目系统托盘图标解决方案 1.1. Nodejs node-webkit还实现了本地化的API,例如菜单栏,系统的托盘图标支持1 1.2. Java c# qt c++1 1.3 ...
- IOS高访微信聊天对话界面(sizeWithFont:constrainedToSize和stretchableImageWithLeftCapWidth的使用)
大家好,百忙之中,抽出点空,写个微博,话说好久没写. 最近项目中有碰到写类似微信聊天界面上的效果,特整理了一下,写了一个小的Demo,希望给没头绪的同学们一个参考! 下载地址:http://files ...
- Viewpager 去掉两侧的光晕效果
方案1: viewPager.setOverScrollMode(viewPager.OVER_SCROLL_NEVER); 方案2:通过反射的办法,直接操作具体控件具体的控件 private voi ...
- 基于node-webkit的web项目打包方案
下载node-webkit https://github.com/rogerwang/node-webkit 找到Downloads这一小节,然后下载对应平台的node-webkit预编译包.(为了介 ...
- 菜鸟教程之工具使用(二)——Maven打包非规范目录结构的Web项目
用过Maven的人都知道,Maven项目的目录结构跟传统的DynamicWeb项目有些不同.当然我们按照Maven的规范建项目最好,但是当你恰好没有按照Maven的规范来,又恰好需要使用Maven来打 ...
- [Windows Azure] What is a Storage Account?
What is a Storage Account? A storage account gives your applications access to Windows Azure Blob, T ...
- [Windows Azure] Getting Started with Windows Azure SQL Data Sync
Getting Started with Windows Azure SQL Data Sync In this tutorial, you learn the fundamentals of Win ...
- python(42):进制转换
十六进制 到 十进制 使用 int() 函数 ,第一个参数是字符串 '0Xff' ,第二个参数是说明,这个字符串是几进制的数. 转化的结果是一个十进制数. >>> int('0xf ...
- Java获取 ISO 8601格式时间
https://blog.csdn.net/fang323619/article/details/74909587 ****************************************** ...