Android中ViewPager的总结

     ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。

1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。

2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。

3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

    在编写ViewPager的应用的使用,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继承自ViewGroup类,而PagerTabStrip类继承PagerTitleStrip类,所以这两个类也是容器类。但是有一点需要注意,在定义XML的layout的时候,这两个类必须是ViewPager标签的子标签,不然会出错。

layout.xml:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context=".MainActivity" >
 6 
 7     <android.support.v4.view.ViewPager
 8         android:id="@+id/viewpager"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content" >
11 
12         <android.support.v4.view.PagerTabStrip
13             android:id="@+id/tabstrip"
14             android:layout_width="wrap_content"
15             android:layout_height="50dip"
16             android:gravity="center" />
17     </android.support.v4.view.ViewPager>
18 
19 </RelativeLayout>

MainActivity.java:

  1 package com.example.android_viewpager1;
  2 
  3 import java.util.ArrayList;
  4 
  5 import android.annotation.SuppressLint;
  6 import android.app.Activity;
  7 import android.os.Bundle;
  8 import android.support.v4.view.PagerAdapter;
  9 import android.support.v4.view.PagerTabStrip;
 10 import android.support.v4.view.ViewPager;
 11 import android.support.v4.view.ViewPager.OnPageChangeListener;
 12 import android.util.Log;
 13 import android.view.LayoutInflater;
 14 import android.view.View;
 15 import android.view.ViewGroup;
 16 
 17 public class MainActivity extends Activity {
 18 
 19     ViewPager pager = null;
 20     PagerTabStrip tabStrip = null;
 21     ArrayList<View> viewContainter = new ArrayList<View>();
 22     ArrayList<String> titleContainer = new ArrayList<String>();
 23     public String TAG = "tag";
 24 
 25     @SuppressLint("ResourceAsColor")
 26     @Override
 27     protected void onCreate(Bundle savedInstanceState) {
 28         super.onCreate(savedInstanceState);
 29         setContentView(R.layout.activity_main);
 30 
 31         pager = (ViewPager) this.findViewById(R.id.viewpager);
 32         tabStrip = (PagerTabStrip) this.findViewById(R.id.tabstrip);
 33         //取消tab下面的长横线
 34         tabStrip.setDrawFullUnderline(false);
 35         //设置tab的背景色
 36         tabStrip.setBackgroundColor(this.getResources().getColor(R.color.bg));
 37         //设置当前tab页签的下划线颜色
 38         tabStrip.setTabIndicatorColor(this.getResources().getColor(R.color.red));
 39         tabStrip.setTextSpacing(200);
 40         
 41         View view1 = LayoutInflater.from(this).inflate(R.layout.tab1, null);
 42         View view2 = LayoutInflater.from(this).inflate(R.layout.tab2, null);
 43         View view3 = LayoutInflater.from(this).inflate(R.layout.tab3, null);
 44         View view4 = LayoutInflater.from(this).inflate(R.layout.tab4, null);
 45       //viewpager开始添加view
 46         viewContainter.add(view1);
 47         viewContainter.add(view2);
 48         viewContainter.add(view3);
 49         viewContainter.add(view4);
 50       //页签项
 51         titleContainer.add("网易新闻");
 52         titleContainer.add("网易体育");
 53         titleContainer.add("网易财经");
 54         titleContainer.add("网易女人");
 55 
 56         pager.setAdapter(new PagerAdapter() {
 57 
 58             //viewpager中的组件数量
 59             @Override
 60             public int getCount() {
 61                 return viewContainter.size();
 62             }
 63           //滑动切换的时候销毁当前的组件
 64             @Override
 65             public void destroyItem(ViewGroup container, int position,
 66                     Object object) {
 67                 ((ViewPager) container).removeView(viewContainter.get(position));
 68             }
 69           //每次滑动的时候生成的组件
 70             @Override
 71             public Object instantiateItem(ViewGroup container, int position) {
 72                 ((ViewPager) container).addView(viewContainter.get(position));
 73                 return viewContainter.get(position);
 74             }
 75 
 76             @Override
 77             public boolean isViewFromObject(View arg0, Object arg1) {
 78                 return arg0 == arg1;
 79             }
 80 
 81             @Override
 82             public int getItemPosition(Object object) {
 83                 return super.getItemPosition(object);
 84             }
 85 
 86             @Override
 87             public CharSequence getPageTitle(int position) {
 88                 return titleContainer.get(position);
 89             }
 90         });
 91 
 92         pager.setOnPageChangeListener(new OnPageChangeListener() {
 93             @Override
 94             public void onPageScrollStateChanged(int arg0) {
 95                 Log.d(TAG, "--------changed:" + arg0);
 96             }
 97 
 98             @Override
 99             public void onPageScrolled(int arg0, float arg1, int arg2) {
100                 Log.d(TAG, "-------scrolled arg0:" + arg0);
101                 Log.d(TAG, "-------scrolled arg1:" + arg1);
102                 Log.d(TAG, "-------scrolled arg2:" + arg2);
103             }
104 
105             @Override
106             public void onPageSelected(int arg0) {
107                 Log.d(TAG, "------selected:" + arg0);
108             }
109         });
110 
111     }
112 
113 }

实现的效果如下:

 

对于PagerAdapter类,android的文档已经说的很清楚了,必须至少实现如下的4个方法,如果需要更好的扩展也可以实现更多的方法。

public Object instantiateItem(ViewGroup container, int position)

public void destroyItem(ViewGroup container, int position,Object object) 

public int getCount()

public boolean isViewFromObject(View arg0, Object arg1) 

posted on 2016-09-08 15:55  baorant  阅读(191)  评论(0编辑  收藏  举报

导航