笔记60--ViewPager循环滑动
来源:互联网 发布:后缀数组代码 编辑:程序博客网 时间:2024/05/29 09:15
实现方式1:给ViewPager的数量设为最大值,然后每次初始化时都求余。参考:http://blog.csdn.net/xiaanming/article/details/8966621
优点:效果好,最后一个和第一个之间的相互跳转与其他界面之间的跳转效果相同。
缺点:有bug。只有一个图片时不显示,两个图片时切换有空白。
实现方式2:通过判断onPageChangeListener()中方法onPageScrollStateChanged的状态来实现。
优点:无bug。
缺点:最后一个和第一个之间的相互跳转会有多个跳转过程(无法设置成只有一个跳转过程)。
实现方式3:尼玛,淘宝,你敢告诉我怎么做到的吗?京东是不会闹还是没闹出来?
我就说说实现方式2吧。
一、原理
除第一次外,ViewPager总是持有三个view实例。每次调用PagerAdapter的instantiateItem方法获取View实例时,传入的都是当前页面的位置的前一页。为了缓存一页,然后销毁掉后一项的后一页。ViewPager只保持当前页,前一页和后一页,超出就销毁。
二、代码
@Overridepublic void onPageScrollStateChanged(int arg0) {switch (arg0) {//手势滑动case 1:isScrolled=false;break;//界面切换case 2:isScrolled=true;break;//滑动结束case 0:// 当前为最后一张,此时从右向左滑,则切换到第一张if (viewPager.getCurrentItem() == viewPager.getAdapter().getCount() - 1 && !isScrolled){viewPager.setCurrentItem(0, false);}// 当前为第一张,此时从左向右滑,则切换到最后一张else if (viewPager.getCurrentItem() == 0 && !isScrolled){viewPager.setCurrentItem(viewPager.getAdapter().getCount() - 1, false);}<span style="white-space:pre"></span>break;default:break;}}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageSelected(int arg0) {//设置选中的tip的背景for(int i=0; i<tips.length; i++){if(i==arg0 % mImageViews.length){tips[i].setBackgroundResource(R.drawable.a2);}else{tips[i].setBackgroundResource(R.drawable.a3);}}}
三、加入定时循环功能
// 开启线程无限自动移动Thread mThread = new Thread(new Runnable() { @Override public void run() { while(!isStop) { // 每隔3秒钟, 发送一条消息到主线程, 更新viewpager的界面 SystemClock.sleep(3000); runOnUiThread(new Runnable() { @Override public void run() { // 此方法是在主线程中执行 int count=new MyPagerAdapter().getCount(); viewPager.setCurrentItem((viewPager.getCurrentItem() + 1)%count, false); } }); } }});mThread.start();
四、几个函数
setCurrentItem(int):设置当前显示第几页(默认带跳转过程的动画)。
setCurrentItem(int, boolean)设置当前显示第几页,指定是否带跳转过程的动画。
getCurrentItem():获取当前显示第几页。
五、源码
0 0
- 笔记60--ViewPager循环滑动
- ViewPager左右循环滑动
- viewpager左右循环滑动
- ViewPager的循环滑动
- ViewPager的循环滑动
- Android 循环滑动viewpager
- Android-ViewPager循环滑动
- ViewPager循环滑动
- ViewPager实现循环滑动
- ViewPager循环滑动
- ViewPager实现循环滑动
- ViewPager的左右循环滑动
- ViewPager实现左右循环滑动
- 左右循环滑动的viewpager
- android viewpager左右循环滑动
- ViewPager实现真循环滑动
- 左右循环滑动的viewpager
- Viewpager最后到最前循环滑动
- Leaflet API 翻译(一)
- 程序员在工作中遇到最郁闷的事情
- OCP 1Z0 053 156
- 第十四章 高级特性-海纳百川:BIRT报表扩展点(续)
- hdu 1796 How many integers can you find(组合数学:容斥定理+dfs)
- 笔记60--ViewPager循环滑动
- LeetCode Evaluate Reverse Polish Notation
- HDC 与 CDC
- 数据库中字段类型的含义
- 第十六章 BIRT疑难杂惑清理
- SQL语句 SQL Server中Text类型操作
- Python守护进程详解<转>
- Linux分区和挂载(mount命令的学习)
- 第十六章 BIRT报表疑难杂惑清理(续)