Android轮播的实现与分析
来源:互联网 发布:淘宝刷好评兼职靠谱吗 编辑:程序博客网 时间:2024/06/16 06:21
Android的轮播主要由ViewPager控件实现
轮播的实现的方法
两种
一种是对PagerAdapter的getCount方法设置为最大,使得用户看不到边界,进而达到轮播效果
另一种是利用setCurrentItem方法,如上图,mList代表需要轮播的界面,在mList的前面和后面各加上一个View,使得0号View的视图前面是3号View(0:b),3号View的视图后面是0号View(5:e),形成一个mViews,mViews是实际提供给ViewPager的数据。利用setCurrentItem方法,在到达0:b 和5: e视图后进行跳转,如此便可以实现无限循环
分析
我个人比较推荐第一种
这两种方法,一种是追求体验,一种是追求代码上的完善。
第一种,返回最大值,这种方法不是真正意义上实现轮播,只是用户一般不会滑动到最后一页而已。这种方法比较流畅,最起码比第二种方法流畅
第二种,setCurrentItem跳转,这种方法有个很大的问题,卡顿白屏,因为setCurrentItem方法跳转需要加载视图,如果不是单纯一张图片,那就很容易出现卡顿现象了。
ViewPager会把当前View和当前View的前一个,后一个View加载起来,保证滑动的流畅。因此如果在PagerAdapter里用了什么static修饰的变量(例如,View设置点击,使用static传递当前View的变量),会出错
由于ViewPager的流畅性是通过预加载实现的,那么,如果setCurrentItem方法,就会没有缓存而出现卡顿,因此,不推荐使用第二种方法
关于第一种方法,有的人可能认为把getCount设置为最大会导致高占用,影响性能(我就是在知乎上曾经看到过这说法),其实这是错的。getCount设置为最大不会有任何影响。View的加载是在被看到和即将被看到时进行的。就像上面说的那样,ViewPager只会加载3个View,不会直接把所有View都加载上。
这其实引申出一个问题,View到底是如何展现到屏幕上的呢?视图的展现一般是通过位图图像(bitmap),进行转换加载的,简单来说,加载视图的最小单位就是一个View,不会说因为只显示了View的一部分,因此只加载那一部分。
这篇博客参考了两位前辈的博客:
getCount的:http://blog.csdn.net/dyllove98/article/details/41013883/
setCurrentItem跳转:http://blog.csdn.net/gaojinshan/article/details/18038181
对于getCount的那篇博客建议认真看,很多东西值得深究,但我不推荐使用里面的优化方法,实现只要把值设置为最大就可以了
有空再把这篇博客完善起来
- Android轮播的实现与分析
- Android轮播实现
- Android图片轮播的实现总结
- Android 图片轮播Banner的实现
- Android实现不一样的广告轮播
- Android ViewPager实现的图片轮播
- Android 无限轮播ViewPager的实现
- Android 实现图片轮播
- 实现Android图片轮播
- Android实现图片轮播
- 利用ViewPager实现的Android轮播|定时器的使用
- android实现能够左右滑动的轮播——轮播制作(三)
- Android图片轮播效果的几种实现方法
- Android 实现图片轮播的三种方法
- Android之利用Viewpager实现图片的轮播效果
- Android使用ViewPager实现图片的轮播
- 练习Android大图轮播效果的实现-大致布局
- Android大图轮播效果的实现-代码逻辑
- Cortex-M3的咬尾中断技术
- android 的DDMS下的data目录权限的方法及攻略(图文)
- 常用的基本数据库语句
- 顶部提示的悬浮窗
- 3-09 Linux驱动初探
- Android轮播的实现与分析
- 控制浏览器不缓存
- 优化算法——截断梯度法(TG)
- Spring Bean的生命周期
- 练习题目-青年歌手大奖赛_评委会打分
- [CF 703C]Chris and Road
- vs2013 安装mysql驱动
- HDU 2255 二分图最大权匹配
- Pacemaker+heartbeat