viewpager一屏展示多个视图
来源:互联网 发布:淘宝回收手机安全吗 编辑:程序博客网 时间:2024/06/06 13:17
最近看到一个应用的banner写的很有意思,在一个viewpager中可以看见左右两个item的部分视图,研究了下,发现实现其实很简单,记述如下。
先看下效果图:
下面来说下实现过程:
1.viewpager及其父控件的布局加上该属性clipChildren=“false”,clipChildren属性表示子view在绘制时不去裁切他们的视图范围。这样childView就不会被父view的宽高所限制。
2.viewpager左右设置一个margin,以便让两边的item出现在可见区域。
3.设置一下viewpager的适配器就完成了。如果想要设置下viewpager的滑动动画,可以用setpageTransform()方法来定制。
贴一下xml代码:
<FrameLayout android:layout_width="match_parent" android:layout_height="200dp" android:clipChildren="false"> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="40dp" android:layout_marginRight="40dp" android:clipChildren="false" /> </FrameLayout>
二、若是想要在viewpager的可见区域中,显示两个item如何实现呢?
一页显示两个item,那么viewpager的margin就只能设置一个,并且需要代码中动态设置了。每个item的宽度为屏幕的宽度减去相邻item的边距,再除以2即可。
private void setViewpagerMargin() { WindowManager wm = this.getWindowManager(); int width = wm.getDefaultDisplay().getWidth(); marginLeft = (width - 20) / 2; FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) vp.getLayoutParams(); layoutParams.leftMargin = marginLeft; vp.setLayoutParams(layoutParams); }
但是这种情况注意,viewpager的滑动事件只在currentItem上,另一个可见的item不能滑动,如果想要整体滑动还得自定义一个view,重写触摸事件。
三、说说viewpager的无限循环
轮播图开发中也用了很多了,对viewpager的循环机制顺便做下总结。
1.设置viewpager的适配器时,getCount设置int类型的最大值,再将当前的item设置为中间值,基本上也算实现了轮播。但是这里有个大问题,getCount的值是childView的个数,过多的话会导致占用太多资源,性能低。
2.在viewpager边界处设置一个中间的view,滑到边界时,调用setCurrent(int,false)方法,无感切换到中间位置,这样虽然不停的滑动实际仍然在当前的几个item上。
/** * 由于一屏显示多个页面,viewpager设置两遍childView,再包装边界页面 * 图片显示顺序:a5,a1,a2...,a5,a1,a2...,a5,a1 */ private void initViewPagerChildView() { viewList.clear(); for (int i = 0; i < (imgResources.length * 2) + 2; i++) { ImageView view = new ImageView(MainActivity.this); view.setScaleType(ImageView.ScaleType.CENTER_CROP); if (i == 0) { //第一个位置显示最后一张图片 view.setImageResource(imgResources[imgResources.length - 1]); } else if (i == (imgResources.length * 2) + 1) { //最后一个位置显示第一张图片 view.setImageResource(imgResources[0]); } else { //存储两遍资源视图 if (i <= imgResources.length) { view.setImageResource(imgResources[i - 1]); } else { view.setImageResource(imgResources[i - imgResources.length - 1]); } } viewList.add(view); } }
代码地址
That is all。
- viewpager一屏展示多个视图
- ViewPager,一屏显示多个page
- ViewPager 一屏显示多个效果
- ViewPager一屏显示多个页面
- 一屏展示多个li轮播设置demo
- 有关ViewPager使用及解决ViewPager的item需要展示多个控件
- 视图 横屏展示
- Multiple-View ViewPager-如何实现Viewpager控件的一个页面展示多个page以及回弹效果
- 一屏显示多个ViewPager的子item(中间显示完全,左右显示部分)
- viewpager一屏显示多个view 并且可以预览下一个view
- 使用ViewPager实现一页显示多个ImageView的滑动切换视图
- ViewPager系列之ViewPager一屏显示多个子页面
- ViewPager系列之ViewPager一屏显示多个子页面
- ViewPager系列之ViewPager一屏显示多个子页面
- ViewPager一屏显示多个子页面
- Android广告展示ViewPager
- Viewpager展示图片
- ViewPager达到展示效果
- Linux 系统缓存机制
- 【BZOJ】 1610 [Usaco2008 Feb]Line连线游戏 计算几何
- three.js模型搭建与地图的3D可视化参考资源
- Deepin pycharm不能import caffe, pycharm ImportError: No module named caffe
- H5中的音乐和视屏自定义
- viewpager一屏展示多个视图
- Android Fragment onAttach(Context context) 不执行
- Linux的socket编程详解
- 文章标题
- 二叉树的非递归先序、中序和后序遍历
- python & pycharm & 2017.7.1
- pwnable之blackjack
- Java创建对象的几种方式
- TCP/IP详解 卷一 :OSI七层模型与TCP/IP五层模型