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 }

实现的效果如下:

Android中ViewPager的总结_总结


对于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)