Android中viewPager使用指南

2019-12-10 19:16:03刘景俊

final View [] pagers = {mInflater.inflate(R.layout.item_one ,null),
              mInflater.inflate(R.layout.item_two , null),
              mInflater.inflate(R.layout.item_three,null)};

    for(int i = 0; i < pagers.length ; i++) {
      myview.add(pagers[i]);
    }
    myview.add(0,mInflater.inflate(R.layout.item_three , null));
    myview.add(4, mInflater.inflate(R.layout.item_one, null));

这里为了测试方便,这里在上个基础上加入了一个item,就是三张view循环播放
 用来实现衔接。当向右滑动到最后一个页面的时候,将这个页指定为第一个view所在的页,向左滑动到第一个页面的时候,将这个页面制定为最后一个view所在页。注意这里的view最后一个不是指数组的最后一个 而是指三个view中最后一个。

设置viewPager的实例化对象的方法setOnPageChangeListener 虽然此方法显示不推荐使用,但为了实现这个功能,还是先将就用吧。等日后谷歌更新viewPager,能有属性自动实现循环。
 代码如下:

 mpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
      @Override
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

      }

      @Override
      public void onPageSelected(int position) {
        int index = position;
        if(index == 0){
        //注意这里pagers数组,不是myviews数组
          index = pagers.length;
        }else if(position == pagers.length + 1){
          index = 1;
        }
        if(position != index){
          mpager.setCurrentItem(index, false);
        }
      }

      @Override
      public void onPageScrollStateChanged(int state) {

      }
    });

重写Adapter中的instantiateItem 方法来显示view

public Object instantiateItem(View arg0, int arg1) {
      if(arg1 == 0){
        ((ViewPager) arg0).removeView(views.get(myview.size() - 3));
        ((ViewPager) arg0).addView(views.get(myview.size() - 3), 0);
      }else if(arg1 == myview.size() - 1){
        ((ViewPager) arg0).removeView(views.get(0));
        ((ViewPager) arg0).addView(views.get(0), 0);

      }else{
        ((ViewPager) arg0).addView(views.get(arg1), 0);
      }
      return views.get(arg1);
    }