viewpage設定引導頁之最後一頁左滑跳轉
現在的app習慣在第一次使用時會進入一個引導頁,在引導頁以圖片的形式向新使用者介紹App的使用和相關資訊,往往這種引導頁是由viewpager來實現,每一頁裡面是一個全屏的ImageView。
這篇部落格的受眾為能實現引導頁,正在尋求跳轉解決方案的新手。
通常情況下,在最後一頁會有一個點選進入的按鈕來引導使用者進入主程式,但是在某些需求之下沒有那個按鈕該怎麼辦?
方案一
想辦法在使用者切換到最後一頁時同時啟動一個延時執行的Handler,比如
new Handler().postDelayed(new Runnable() { public void run() { startActivity(LoginActivity.class); finish(); } }, 2000);
通過這個我們就能在2s之後跳轉到主要介面,但是問題是一旦到了最後一頁,使用者再想回前幾頁就不可能了,只能等待跳轉,這個監聽是在onPageSelected中實現,因為它返回了當前位置。
方案二
在最後一頁時,使用者再次左滑,進入主要介面,這個的實現可以給最後一頁的ImageView設定手勢監聽,本文主要講另一種簡單科學的實現方法。
在ViewPager中本來就有手勢監聽,不然我們怎麼可能左滑右滑切換,所以可以直接利用就好了,在講解方法之前,先了解一個ViewPager的三個狀態。
int SCROLL_STATE_DRAGGING:Indicates that the pager is currently beingdragged by the user.
int SCROLL_STATE_IDLE:Indicates that the pager is in an idle,settled state.(空閒狀態)
int SCROLL_STATE_SETTLING:Indicates that the pager is in the process ofsettling to a final position. (一個拖動過程完成)
總的來說就是拖動中,拖動完,空閒三種狀態
到此為止需要用到的元素都出來了
但是還缺關鍵的一點:
但是如果最後一頁向左滑動和第一頁向右滑動是不可能滑動成功的,於是狀態改變就有些不同——》——》我們發現或一種狀態裡面缺少了一個拖動過程完成的狀態,於是利用這種差別,我們就能很好的實現一開始的需求了。直接附上程式碼吧。
<pre name="code" class="java">@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
switch (state) {
case ViewPager.SCROLL_STATE_DRAGGING:
Log.i("zfc", "SCROLL_STATE_DRAGGING");
misScrolled = false;
break;
case ViewPager.SCROLL_STATE_SETTLING:
Log.i("zfc", "SCROLL_STATE_SETTLING");
misScrolled = true;
break;
case ViewPager.SCROLL_STATE_IDLE:
Log.i("zfc", "SCROLL_STATE_IDLE");
if (vp.getCurrentItem() == vp.getAdapter().getCount() - 1 && !misScrolled) {
startActivity(LoginActivity.class);
}
misScrolled = true;
break;
}