標籤:android style blog class code java
ViewPager可以說是Android應用中使用比較廣發的一個組件了,它可以協助我們很
方便地實現滑動更換View的效果,剛好最近搞的一個項目有一個需求用到了這個,同
時是要能在首頁和尾頁滑動時可以進行響應,而不是像預設的那樣沒有任何動作,所
以稍微研究了下,希望可以對大家有所協助。
在分析了需求之後,發現這個應該是和ViewPager的換頁監聽有聯絡,於是做了個小
demo,通過實驗來尋找問題的解決方案。
首先貼出換頁監聽器的幾個public方法以及第一個方法中state數字代表的含義,如下
圖所示。
這裡我們重點關注前兩個方法,它們和scroll動作相關,具體實驗代碼如下:
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {// TODO Auto-generated method stub}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stubLog.d("TestActivity", arg0+","+arg1+","+arg2);}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stubLog.d("TestActivity", arg0+"");}};
當在首頁往左滑動時,log資訊如右:,可以發現以以1開頭,以0結尾
(數位含義請參看上面所給圖中關於state的解釋);當在中間頁向右滑動時,log資訊
如下所示,此時從1經曆了2的狀態,最後到了0狀態;當在最後一頁繼續向右滑動時,
log資訊如右:,和情況1類似,狀態從1變到了0,但是第二行是以2開
頭的,而情況1是以0開頭的(測試案例一共是3頁,也就是說第二行開頭數字代表的
是該頁的編號),實驗到此就結束了。
綜上可得,如果要在首頁往左滑動時響應動作可以如下寫,同理如果要想在最後一
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {// TODO Auto-generated method stub}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub//Log.d("TestActivity", arg0+","+arg1+","+arg2);curPage = arg0;}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub//Log.d("TestActivity", arg0+"");if (preState == 1 && arg0 == 0 && curPage == 0) {your action...}preState = arg0;}};
頁往右滑動時響應動作,只要將判斷第三個方法中判斷條件中的"curPage == 0"改為
"curPage == view size - 1"即可。
在這個實驗中我們只使用了部分資料,其他資料其實也是很有用的,比如你要想
實現滑動到頁面的一半時響應動作,就可以在onPageScrolled方法中檢測第二個參數
的變化等等,所以動動手,可以學會的東西還是挺多的。