Android之ViewPager

ViewPager的作用

ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。ViewPager用于实现多页面的切换效果。该类存在于Google的兼容包里(android.support.v4.view.ViewPager。)

ViewPager的使用

  • ViewPager直接继承于ViewGroup,是一个容器类控件,可以在其中添加其他的View

  • ViewPager需要通过PagerAdapter适配器来提供数据

  • ViewPager通常与Fragment连用,有FragmentPagerAdapter和FragmentStatePagerAadapter 来提供Fragment给ViewPager

ViewPager的使用步骤

  • 在布局文件定义ViewPager组件(android.support.v4.view.ViewPager)
  • 在Activity中设置ViewPAger放置的内容
  • 给ViewPager对象设置适配器

实现PagerAdapter需重写的方法

  • instantiateItem(ViewGroup, int) :根据指定的下标创建viewpager当中pager页
  • destoryItem(ViewGroup,int,Object):根据指定的下标移除ViewPager中的pager页
  • getCount():当前适配器加载的数据条目
  • isViewFromObject(View,Object):判断viewpager中加载的view和instantiateItem实例化的view是不是一致的

ViewPager监听页面改变(OnPageChangeListener)

     vp.setOnPageChangeListener(new OnPageChangeListener() {
                     /**
          * 页面被选中时回调的方法
         * position  :表示页面的位置
         * */
        @Override
        public void onPageSelected(int position) {
            
            
        }
        /**页面滚动时回调的方法
         * position:当前页面向下滑动的角标
         * positionOffset:当前页面滑动的偏移量
         * positionOffsetPixels:当前页面滑动的偏移量对应的像素值
         * */
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            
        }
        /**当页面滚动状态改变时回调的方法
         * 参数包含三种状态:
         *  SCROLL_STATE_IDLE  :停止状态
            SCROLL_STATE_DRAGGING:滚动状态
            SCROLL_STATE_SETTLING:选中状态
         * */
        @Override
        public void onPageScrollStateChanged(int position) {
        }
    });
}

PagerTitleStrip和PagerTabStrip的使用

  • 两者的区别:
    1.PagerTabStrip的底部有一条下划线,选中项的下划线可以改变颜色并且加粗的
    2.PagerTabStrip是可以被点击的,可以与ViewPager交互,而PagerTabStrip是不能点击的

  • 实例:PagerTabStrip+ViewPager
    布局文件:
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/vp"
      >
      
          
      
    
    
      
      
      
      
    
    
    `
    

MainActivity.java

public class MainActivity extends Activity {

private ViewPager viewPager;

private PagerTabStrip pagerTabStrip;

private int [] images= {R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.a};

private List list;

private ImageView icons[];

private List title;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    viewPager = (ViewPager) findViewById(R.id.vp);
    
    pagerTabStrip = (PagerTabStrip) findViewById(R.id.titlestrip);
    
    list = new ArrayList();
    
    for (int i = 0; i < images.length; i++) {
        ImageView iV = new ImageView(this);
        iV.setBackgroundResource(images[i]);
        list.add(iV);
    }
    
    pagerTabStrip.setDrawFullUnderline(false);
    pagerTabStrip.setBackgroundColor(Color.RED);  //设置背景颜色
    pagerTabStrip.setTabIndicatorColor(Color.GREEN);
    
    title = new ArrayList();
    title.add("女一");
    title.add("女二");
    title.add("女三");
    title.add("女si");
    
    MyPageAdapter adapter = new MyPageAdapter();
    viewPager.setAdapter(adapter);
    
    initicon();
    
    viewPager.setOnPageChangeListener(new OnPageChangeListener() {
        /**页面选中时回调的方法
         * arg0:页面的位置
         */
        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub
            for (int i = 0; i < images.length; i++) {
                icons[i].setImageResource(R.drawable.white);
            }
            icons[arg0].setImageResource(R.drawable.blue);
        }
        /**
         * 页面滚动回调的方法
         * arg:当前页面向下滑动的的角标
         * arg1:当前页面滑动的偏移量
         * arg2;当前页面滑动偏移量对应的像素值
         */
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub
            
        }
        /**
         * 页面滚动时回调的方法
         */
        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub
            
        }
    });
}

//初始化指示图标

private void initicon(){
    LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
    icons = new ImageView[images.length];
    
    for (int i = 0; i < icons.length; i++) {
        icons[i] = (ImageView) layout.getChildAt(i);//找到已知布局中的子控件
        icons[i].setImageResource(R.drawable.white);
        icons[i].setTag(i);
        icons[i].setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Log.i("info0", (Integer)v.getTag()+"");
                viewPager.setCurrentItem((Integer)v.getTag());
                
            }
        });
    }
    
    icons[0].setImageResource(R.drawable.blue);
}

class MyPageAdapter extends PagerAdapter{

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0==arg1;
    }
    
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        
        container.addView(list.get(position));
        Log.i("info1", position+"");
        return list.get(position);
    }
    
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        Log.i("info2", position+"");
        container.removeView(list.get(position));
    }
    
    @Override
    public CharSequence getPageTitle(int position) {
        // TODO Auto-generated method stub
        return title.get(position);
    }
}

}

你可能感兴趣的:(Android之ViewPager)