现在的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. (一个拖动过程完成)
总的来说就是拖动中,拖动完,空闲三种状态
到此为止需要用到的元素都出来了
但是还缺关键的一点:
正常拖动过程中状态变化时 SCROLL_STATE_IDLE——》SCROLL_STATE_DRAGGING——》SCROLL_STATE_SETTLING——》SCROLL_STATE_IDLE
我们发现或一种状态里面缺少了一个拖动过程完成的状态,于是利用这种差别,我们就能很好的实现一开始的需求了。直接附上代码吧。
<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;
}