1. 程式人生 > >viewpage設定引導頁之最後一頁左滑跳轉

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_DRAGGINGIndicates 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_SETTLINGIndicates that the pager is in the process ofsettling to a final position. (一個拖動過程完成)

總的來說就是拖動中,拖動完,空閒三種狀態

再說說OnPageChangeListener(),它裡面有個方法onPageScrollStateChanged(int state),這方法是監聽狀態改變,每次改變狀態便會執行這個方法內的內容。

到此為止需要用到的元素都出來了

但是還缺關鍵的一點:

但是如果最後一頁向左滑動和第一頁向右滑動是不可能滑動成功的,於是狀態改變就有些不同——》——》

我們發現或一種狀態裡面缺少了一個拖動過程完成的狀態,於是利用這種差別,我們就能很好的實現一開始的需求了。直接附上程式碼吧

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