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

 

posted on 2012-08-23 15:18  jiezzy  阅读(1515)  评论(0编辑  收藏  举报