VeiwPager 是一个ViewGroup,能够包含不少的View,当手指在屏幕上左右滑动的时候,能够切换界面。能够作不少事情,从最简单的导航,到页面菜单等。用法与ListView相似,也须要一个适配器,就是PagerAdapter。android
ViewPager通常与Fragment结合使用比较方便。数组
ViewPager+Fragment能够作出多页面滑动的效果,让咱们的应用程序界面操做起来更加灵活ide
ViewPager滑动事件讲解:函数
首先ViewPager在处理滑动事件时要用到OnPageChangeListener布局
OnPageChangeListener这个接口须要实现三个方法:(onPageScrollStateChanged,onPageScrolled ,onPageSelected)字体
onPageScrollStateChanged(int arg0) ,此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。arg0 ==1的时表示正在滑动,arg0==2的时表示滑动完毕了,arg0==0的时表示什么都没作。this
onPageScrolled(int arg0,float arg1,int arg2) ,当页面在滑动的时候会调用此方法,在滑动被中止以前,此方法回一直获得调用。其中三个参数的含义分别为:spa
arg0 :当前页面,及你点击滑动的页面code
arg1:当前页面偏移的百分比server
arg2:当前页面偏移的像素位置
onPageSelected(int arg0) :此方法是页面跳转完后获得调用,arg0是你当前选中的页面的Position(位置编号)。
1、使用ViewPager
ViewPager的使用与ListView使用相似,也要绑定相应的适配器。
ViewPager的使用主要分3个步骤:
一、在布局文件中添加ViewPager控件。注意:写这个控件的时候要写全称(包名+类名)
<android.support.v4.view.ViewPager
android:id="@+id/main_viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/rg">
<android.support.v4.view.PagerTabStrip
android:id="@+id/pagertab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top" />
</android.support.v4.view.ViewPager>
PagerTabTrip要当作ViewPager的一个子标签来用,能够用android:layout_gravity=TOP|BOTTOM来制定title的位置,若是要显示出PagerTabTrip的某一项Title,须要在ViewPager的Adapter中实现getPageTitle(int)。
instantiateItem(ViewGroup,int)//实例化页卡 destroyItem(ViewGroup,int,Object)//删除页卡 getCount()//返回页卡的数量 isViewFromObject(View,Object)//判断两个对象是否相等 getPageTitle(int position)//设置标签显示的标题
设置指示标签的属性:
pagerTabStrip.setTabIndicatorColor();//指示器的颜色 pagerTabStrip.setBackgroundColor();//背景色 pagerTabStrip.setTextColor(Color.WHITE);//设置字体颜色
二、加载要显示的界面,并把要显示的页面放入数组或List集合中
LayoutInflater lf = getLayoutInflater().from(this); view1 = lf.inflate(R.layout.layout1, null); view2 = lf.inflate(R.layout.layout2, null); view3 = lf.inflate(R.layout.layout3, null); viewList = new ArrayList<View>(); viewList.add(view1); viewList.add(view2); viewList.add(view3);
三、在Activity里实例化ViewPager组件,并设置它的Adapter,通常须要重写PagerAdapter。(和ListView使用差很少,使用步骤也相似。)
ViewPager的方法:
dataSetChanged():在 PagerObserver.onChanged(),以及 PagerObserver.onInvalide() 中被调用。所以当 PagerAdapter.notifyDataSetChanged() 被触发时,ViewPager.dataSetChanged() 也能够被触发。该函数将使用 getItemPosition() 的返回值来进行判断,若是为 POSITION_UNCHANGED,则什么都不作;若是为 POSITION_NONE,则调用 PagerAdapter.destroyItem() 来去掉该对象,并设置为须要刷新 (needPopulate = true) 以便触发 PagerAdapter.instantiateItem() 来生成新的对象。
2、PagerAdapter
PagerAdapter是ViewPager的支持者,ViewPager将调用它来取得所需展现的页面,而PagerAdapter也会在数据变化时通知ViewPager。这个类也是FragmentPagerAdapter以及FragmentStatePagerAdapter的基类。若是继承此类,至少须要实现instantiateItem(),destroyItem(),getCount()以及isViewFromObject()四个方法。
3、ViewPager添加标题
<android.support.v4.view.PagerTitleStrip android:id="@+id/pagerTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top"/>
2.覆写PagerAdapter的getPageTitle(position)方法,该方法返回每一个界面的title
注意:还有一种标题是android.support.v4.view.PagerTabStrip用法与上面的彻底同样,惟一区别就是每一个标题下面添加了一个下划线,而且标题也可点击
4、给ViewPager添加监听器OnPageChageListner
pager.setOnPageChangeListener(new OnPageChangeListener() { /** * 当滑动结束后,新的pager彻底显示到屏幕后会调用该方法 * 参数:新的pager的index */ @Override public void onPageSelected(int arg0) { // Log.e(TAG, "onPageSelected..." + arg0); } /** * 当正在滑动时,会一直回调该方法 * arg0 :当前页面,及你点击滑动的页面 * arg1:当前页面偏移的百分比 * arg2:当前页面偏移的像素位置 */ @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // Log.e(TAG, "onPageScrolled..." + arg0 + " " + arg1 + " " + arg2); } /** * 当状态方法改变的时候调用 * 参数:页面的状态 * 共有三种状态: * SCROLL_STATE_IDLE 页面静止的时候的状态 SCROLL_STATE_DRAGGING 正在滑动的状态 SCROLL_STATE_SETTLING 到了要滑动的最终位置的状态 */ @Override public void onPageScrollStateChanged(int arg0) { // String msg = ""; switch (arg0) { case ViewPager.SCROLL_STATE_DRAGGING: msg = "正在滑动"; break; case ViewPager.SCROLL_STATE_IDLE: msg = "静止了"; break; case ViewPager.SCROLL_STATE_SETTLING: msg = "到了"; break; default: break; } Log.e(TAG, "onPageScrollStateChanged..." + msg); } });