ViewPager使用总结之基本使用

ViewPager是在android.support.v4扩展提供的一个类,用于实现页面切换,导航等等,它里面主要是通过Scroller和PagerAdapter达到左右滑动页面切换的效果。

一、ViewPager使用步骤

(1) xml文件定义ViewPager

    Eg:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  
      
   <android.support.v4.view.ViewPager    
        android:id="@+id/viewPager"    
        android:layout_width="fill_parent"    
        android:layout_height="wrap_content" />   
</FrameLayout>

..........

setContentView(R.layout.activity_testviewpager);
viewPager = (ViewPager) findViewById(R.id.viewPager);

(2) 定义PagerAdapter的子类

继承PagerAdapter,至少必须重写下面的四个方法 

public Object instantiateItem(View container, int position) //根据给定的postion创建页面,适配器负责向container添加view

public void destroyItem(View container, int position, Object object)  //View的回收处理,此方法被调用时机:在页面进行切换的时候距离当前位置2个步幅(包括2个步幅)以上的那个View销毁,就会触发destroyItem方法
       以上两个方法instantiateItem,destroyItem如果子类没有覆盖会抛出运行期异常: UnsupportedOperationException("Required method destroyItem was not overridden")

public abstract boolean isViewFromObject(View view, Object object)//用来判断pager的一个view是否和instantiateItem方法返回的object有关联,这里object参数对应 instantiateItem方法返回的

 public abstract int getCount() //返回可见view的个数

其中两个方法没有被覆盖则会抛运行期异常,其中两个是抽象方法,所以必须覆盖以上有四个方法

Eg:

<pre name="code" class="java">public class ViewPagerAdapter extends PagerAdapter
{
	private List<View> images;

	public ViewPagerAdapter(List<View> images)
	{
		this.images = images;
	}

	@Override
	public int getCount()
	{
		return images.size();
	}

	public boolean isViewFromObject(View arg0, Object arg1)
	{
		return arg0 == arg1;
	}

	// PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁
	@Override
	public void destroyItem(ViewGroup view, int position, Object object)
	{
		view.removeView(images.get(position));
	}

	// 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可
	@Override
	public Object instantiateItem(ViewGroup view, int position)
	{
		view.addView(images.get(position));
		return images.get(position);
	}
}


 
 

(3) 设置adapter

viewPager.setAdapter(new ViewPagerAdapter (images));

(4)设置当前显示位置

viewPager.setCurrentItem(0);

二、ViewPager 特点

(1) ViewPager最多管理3个页面

(2) PagerAdapter在初始化时调用几次instantiateItem和当前位置position有关系(setCurrentItem(int position)):
eg:有3条数据,position处于以下:
position = 0  (最左边) --> 初始化2个(当前位置的右边View,position=1),调用instantiateItem方法2次
position = 1 (中间) --> 初始化3个(当前位置的两边View,position=0,position=2),调用instantiateItem方法3次
position = 2 (最右边)--> 初始化2个(当前位置的左边View,position=1),调用instantiateItem方法2次

所以初始化的时候instantiateItem最多被调用3次。

(3) destroyItem方法调用时机

   在进行滑动切换的时候,距离当前位置2个步幅(包括2个步幅)以上的View会被销毁;如果只有1条或2条数据(3条数据以下),那么destroyItem方法是不会被调用的。


参考:

http://blog.csdn.net/leo8573/article/details/7893841

http://www.cnblogs.com/xinye/archive/2013/06/09/3129140.html

http://www.it165.net/pro/html/201403/11289.html







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值