Android ViewPager使用

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。

注释里解释的很清楚了,就不在说明了。


点击源代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值