ViewPager的左右循环滑动
有两处关键代码,第一处,生成用于PagerAdapter的View列表:
- private List<View> initViews(){
- List<View> listViews = new ArrayList<View>();
- MyView v1 = new MyView(this, R.layout.view1);
- MyView v2 = new MyView(this, R.layout.view2);
- MyView v3 = new MyView(this, R.layout.view3);
- // 循环滑动:头部添加一个和原尾部相同的view,尾部添加一个和原头部相同的view
- MyView v0 = new MyView(this, R.layout.view3);
- MyView v4 = new MyView(this, R.layout.view1);
- listViews.add(v0);
- listViews.add(v1);
- listViews.add(v2);
- listViews.add(v3);
- listViews.add(v4);
- return listViews;
- }
第二处,重写OnPageChangeListener的onPageSelected方法,当前页为0时改为倒数第二个,也就是实际需要的最后一个view;当前页为最后一个时改为第二个,即实际上的第一个view:
- public void onPageSelected(int arg0) {
- if(arg0 == 0){
- mPager.setCurrentItem(listViews.size() - 2, false);
- } else if(arg0 == listViews.size() - 1){
- mPager.setCurrentItem(1, false);
- }
- }
不要忘记在初始化时设置当前view为1,而不是默认的0:
- mPager.setCurrentItem(1);
如果不想循环,但是想左右两头仍可以滑动,松开手后仍保持在原来的view,可以做如下改动。
首先,头尾各添加两个空view:
- private List<View> initViews(){
- ......
- listViews.add(new View(this));
- listViews.add(v1);
- listViews.add(v2);
- listViews.add(v3);
- listViews.add(new View(this));
- ......
- }
然后,OnPageChangeListener的onPageSelected方法改为下面的形式:
- public void onPageSelected(int arg0) {
- if(arg0 == 0){
- mPager.setCurrentItem(1, false);
- } else if(arg0 == listViews.size() - 1){
- mPager.setCurrentItem(listViews.size() - 2, false);
- }
}
其中instantiateItem方法用来得到每个View,destroyItem用以控制当某个View不需要的时候的回收处理。isViewFromObject用来实现判断View和Object是否为同一个View。
转:http://blog.csdn.net/javasecret/article/details/7843726