zoukankan      html  css  js  c++  java
  • ViewPager的左右循环滑动

    有两处关键代码,第一处,生成用于PagerAdapter的View列表:

    1.     private List<View> initViews(){  
    2.         List<View> listViews = new ArrayList<View>();  
    3.           
    4.         MyView v1 = new MyView(this, R.layout.view1);  
    5.         MyView v2 = new MyView(this, R.layout.view2);  
    6.         MyView v3 = new MyView(this, R.layout.view3);  
    7.           
    8.         // 循环滑动:头部添加一个和原尾部相同的view,尾部添加一个和原头部相同的view  
    9.         MyView v0 = new MyView(this, R.layout.view3);  
    10.         MyView v4 = new MyView(this, R.layout.view1);  
    11.           
    12.         listViews.add(v0);  
    13.         listViews.add(v1);  
    14.         listViews.add(v2);  
    15.         listViews.add(v3);  
    16.         listViews.add(v4);          
    17.           
    18.         return listViews;  
    19.     }  

    第二处,重写OnPageChangeListener的onPageSelected方法,当前页为0时改为倒数第二个,也就是实际需要的最后一个view;当前页为最后一个时改为第二个,即实际上的第一个view:

    1.     public void onPageSelected(int arg0) {  
    2.          if(arg0 == 0){  
    3.              mPager.setCurrentItem(listViews.size() - 2, false);  
    4.          } else if(arg0 == listViews.size() - 1){  
    5.              mPager.setCurrentItem(1, false);  
    6.          }  
    7.     }  

    不要忘记在初始化时设置当前view为1,而不是默认的0:

    1. mPager.setCurrentItem(1);  


    如果不想循环,但是想左右两头仍可以滑动,松开手后仍保持在原来的view,可以做如下改动。

    首先,头尾各添加两个空view:

    1.     private List<View> initViews(){  
    2.         ......  
    3.         listViews.add(new View(this));  
    4.         listViews.add(v1);  
    5.         listViews.add(v2);  
    6.         listViews.add(v3);  
    7.         listViews.add(new View(this));      
    8.         ......  
    9.     }  

    然后,OnPageChangeListener的onPageSelected方法改为下面的形式:

      1.     public void onPageSelected(int arg0) {  
      2.          if(arg0 == 0){  
      3.              mPager.setCurrentItem(1, false);  
      4.          } else if(arg0 == listViews.size() - 1){  
      5.              mPager.setCurrentItem(listViews.size() - 2, false);  
      6.          }  

        } 

     其中instantiateItem方法用来得到每个View,destroyItem用以控制当某个View不需要的时候的回收处理。isViewFromObject用来实现判断View和Object是否为同一个View。

    转:http://blog.csdn.net/javasecret/article/details/7843726

     

  • 相关阅读:
    使用phpstorm和xdebug实现远程调试
    让VS2010/VS2012添加新类时自动添加public关键字
    C#壓縮文件幫助類 使用ICSharpCode.SharpZipLib.dll
    C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件
    用C#制作PDF文件全攻略
    多条件动态LINQ 组合查询
    bootstrap fileinput 文件上传工具
    Web Uploader文件上传插件
    Bootstrap文件上传插件File Input的使用
    flashfxp v3.7 注册码
  • 原文地址:https://www.cnblogs.com/jiezzy/p/2652496.html
Copyright © 2011-2022 走看看