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=" ...
随机推荐
- javaweb下载文件
//读取文件->写出文件 public static void main(String[] args) { InputStream in =null; OutputStream out = nu ...
- 全局获取 (Activity)Context,实现全局弹出 Dialog
为什么需要一个全局的 (Activity)Context 需求1:在进入 app 的时候,要求做版本检测,有新的版本的时候,弹出一个 AlertDialog,提示用户版本更新 需求2:从别的设备挤下来 ...
- C++生成斐波拉其数列
该方法作为一种演示功能左右,运行较慢. #include <iostream> using namespace std; class Fibonacci{ public: int a, b ...
- android 的build.gradle 的API手册
问题:对于用gradle的来配置java的开发者都能在GRADLE_HOME/docs/dsl找到如何对其build.gradle文件的具体属性. 但是对于开发android的开发者就不能对于官方的& ...
- [svc]nginx限制客户端上传附件的大小
300 行 python 代码的轻量级 HTTPServer 实现文件上传下载 系统环境 [root@n1 conf]# cat /etc/redhat-release CentOS Linux re ...
- 绕过chrome的弹窗拦截机制
在chrome的安全机制里面,非用户触发的window.open方法,是会被拦截的.举个例子: var btn = $('#btn'); btn.click(function () { //不会被拦截 ...
- 【React Native开发】React Native应用设备执行(Running)以及调试(Debugging)(3)
),React Native技术交流4群(458982758),请不要反复加群.欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章 ...
- C++11 强枚举类型
在标准C++11之前的枚举是继承C的,枚举类型不是类型安全的.枚举类型被视为整数,这使得两种不同的枚举类型之间可以进行比较. 一.C中enum类型的局限语法: enum type1{a, b, c}; ...
- Ubantu 使用extundelete恢复数据
所以在维护系统的时候,要慎之又慎,但是有时难免会出现数据被误删除的情况,在这个时候改如何快速.有效地恢复数据呢?本文我们就来介绍一下Linux系统下常用的几个数据恢复工具. 一.如何使用“rm -rf ...
- 每日英语:The Benefits of a Better Men's T-Shirt
"I WEAR A T-shirt and jeans every single day," said Erik Schnakenberg, 30, co-founder of t ...