1、ViewPager的主要用途是做可以滑动的页面,Android4.0后的原生联系人程序,拨号盘和通话记录之间滑动就是使用的ViewPager,再一个很常见到的例子,微信,微博等初次登陆时的导航提示,也是使用ViewPager实现的。所以ViewPager还是很常用的。
那么我们就开始吧。
先来两张效果图
好了,开始上代码:
1、首先在布局文件中加入ViewPager控件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ViewPagerActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
</RelativeLayout>
2、此时我们已经把ViewPager加到了我们的布局中,但是它是没有数据的,我们像ListView一样,给他提供一个适配器,Android给我们提供了ViewPager的基本适配器PagerAdapter,我们继承这个类。
class SkyViewPagerAdapter extends PagerAdapter {
private List<View> mListViews;
public SkyViewPagerAdapter (List<View> views) {
this.mListViews = views;
}
public int getCount() {
return mListViews.size();
}
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mListViews.get(position));
return mListViews.get(position);
}
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mListViews.get(position));
}
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
}
这里面getCount()很容易理解,ViewPager显示的时候,首先读取它对应适配器的getCount方法,看看需要显示的数据总数,此方法和ListView的getCount效果一致。
这里比较重要的是另外两个方法instantiateItem(ViewGroup container,int position) 和 destroyItem(ViewGroup container, int position, Object object) 。在这两个方法里实现了增加和删除View的功能。
3、经过上面两个步骤,我们实现了ViewPager, 和 PagerAdapter,但是还有最重要的一点,上面SkyViewPagerAdapter 的构造函数了里的List数据哪儿来的,那么请接着往下看,精彩马上就来
/**
* 初始化ViewPager要显示的数据。
*/
private void initListViews(){
mListViews = new ArrayList<View>();
LayoutInflater mInflater = LayoutInflater.from(this);
View view1 = mInflater.inflate(R.layout.view_pager_item_1, null);
View view2 = mInflater.inflate(R.layout.view_pager_item_2, null);
mListViews.add(view1);
mListViews.add(view2);
}
view_pager_item_1.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView android:id="@+id/mImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/view_pager_1"
/>
<TextView android:id="@+id/mText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="15dip"
android:text="1"/>
</RelativeLayout>
view_pager_item_2.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView android:id="@+id/mImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/view_pager_2"
/>
<TextView android:id="@+id/mText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="15dip"
android:textColor="#ff0000"
android:text="2"/>
</RelativeLayout>
4、最后展示最重要的一步,把所有的都关联起来...
mViewPager = (ViewPager) findViewById(R.id.viewpager); //从View中获取ViewPager实例。
mViewPagerAdapter = new SkyViewPagerAdapter(mListViews);//新建SkyViewPagerAdapter对象,并把View的list数据传递进去。
mViewPager.setAdapter(mViewPagerAdapter);//把Adapter设置给ViewPager。
注释里解释的很清楚了,就不在说明了。
点击源代码下载