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); } });