ViewPager滾動監聽解釋

這周做了一個需求,使用viewpager實現圖片的滾動,我的需求是三張圖片,要求在滾動時,圖片在兩兩之間有淡入淡出效果,

要想實現這個效果,要在viewpager的滾動監聽中操作,首先看一下viewpager的滾動監聽函數

OnPageChangeListener這個接口需要實現三個方法:(onPageScrollStateChanged,onPageScrolled ,onPageSelected)

 public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }


  public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

 public void onPageSelected(int arg0) {
        // TODO Auto-generated method stub

}


以上三個方法就是實現viewpager監聽器時,必須重寫的方法

onPageScrollStateChanged中的arg0參數有三種狀態,分別是0,1,2

安照我們滾動的順序講解(手指觸摸-手指滑動-手指擡起)

當我們手指觸摸到viewpager時,不滑動(就是你點擊viewpager,OnPagerChangeListener監聽器是不會監聽你的點擊操作的,也就是說你必須做滑動操作,OnPagerChangeListener纔會不觸發)viewpager的監聽器不會觸發。

當我們手指觸摸到viewpager時,進行了滑動(輕微也是滑動了),參數arg0這時的狀態值是1(1表示滑動),當然,當你滑動的時候,viewpager不會停留在這裏,隨着你的滑動,OnPagerChangeListener會調用  public void onPageScrolled(int arg0, float arg1, int arg2) 這個函數,

         arg0:表示當前頁面,你是你滑動的頁面

         arg1:表示你滑動時,當前頁面的偏移的百分比

        arg2:表示滑動時,當前頁面的偏移像素位置

然後,當你手指擡起,這裏會有兩種情況

        1:頁面沒有切換到下一頁,調用 onPageScrollStateChanged(int arg0),其中的arg0的狀態值arg0變成了2,這時會再次調用 public void onPageScrolled(int arg0, float arg1, int arg2)然後回到原位,回到原位過程中,調用onPageScrollStateChanged(int arg0)函數,其中的arg0變成了0,表示結束,看到這裏想必你已經看出來了,在沒有切換到新的頁面時,onPageScrollStateChanged(int arg0)點用了3次,對應了3中狀態值。

       2:頁面切換到下一頁,調用onPageScrollStateChanged(int arg0),其中的arg0的狀態值arg0變成了2,然後緊接着調用了又一個方法 onPageSelected(int arg0) ,這個方法在切換頁面成功,纔會調用,然後和1情況一樣調用public void onPageScrolled(int arg0, float arg1, int arg2),但是區別在於,這有一個過渡過程,因爲最後arg0的值,會從當前也面的值(比如 i)變成下一個頁面的值(i+1),最後調用onPageScrollStateChanged(int arg0),其中的arg0變成了0,表示結束,看到這裏想必你已經看出來了,也調用了3次,所以只要可以滾動,它都會調用3次



還有一種特殊情況,就是你的viewpager就是第一頁,而你的viewpager是不帶循環滑動的,這時你想不能滑動的方向滑動,這時OnPagerChangeListener之調用onPageScrollStateChanged(int arg0) 中的arg0=1和arg0=0的狀態,因爲arg0=2表示滑動,頁面都沒有了,所以不會動的,所以只有兩種狀態,注意他們兩之間還是有onPageSelected(int arg0) 函數的調用的


發佈了27 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章