1. 要使用ViewPager,必须要创建 PagerAdapter。 这里创建一个 ViewPagerAdapter来继承PagerAdapter

public class ViewPagerAdapter extends PagerAdapter{

    private List<View> views;   // 我们引导页的list
private Context context; // 上下文 public ViewPagerAdapter(List<View> views, Context context) {
this.views = views;
this.context = context;
} // 移除一个view
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//super.destroyItem(container, position, object);
container.removeView(views.get(position));
} // 加载一个view
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(views.get(position));
return views.get(position);
} @Override
public int getCount() { // 必写的方法 返回当前views的数量
return this.views.size();
} @Override
public boolean isViewFromObject(View view, Object object) { //必写的方法 判断当前的view是否是我们需要的对象
return (view == object);
}
}

2. 创建我们引导页的视图

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--filpInterval 设置View之间切换的时间间隔 (在androidStudio上面跑不起来 可以不需要)
persistentDrawingCache 持久化绘画缓存
-->
<android.support.v4.view.ViewPager
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00000000"
android:persistentDrawingCache="animation"
android:id="@+id/viewpage"
>
</android.support.v4.view.ViewPager>
</RelativeLayout>

3. 创建引导页的图片视图 one.xml和two.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:background="@drawable/guide1"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:background="@drawable/guide2"/> </LinearLayout>

 4. 在我们的activity中使用

 public class Guide extends Activity{

     private ViewPager vp;
private ViewPagerAdapter vpAdapter;
private List<View> views; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);//加载guide.xml 视图
this.initView(); System.out.println("onCreate");
} // 初始化view
public void initView() {
/*
* Inflater英文意思是膨胀,在Android中应该是扩展的意思吧。
LayoutInflater的作用类似于 findViewById(),
不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!
而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。
*
* */
LayoutInflater inflater = LayoutInflater.from(this);
views = new ArrayList<View>();
views.add(inflater.inflate(R.layout.one, null)); // 加载视图1
views.add(inflater.inflate(R.layout.two, null)); // 加载视图2 vpAdapter = new ViewPagerAdapter(views, this); // 创建我们的 adapter
vp = (ViewPager) findViewById(R.id.viewpage);
vp.setAdapter(vpAdapter); // viewpage绑定 adapter
}
}

5. 运行就有引导页的两张图片,可以来回切换。

6. 添加导航点

① 在原来的guide.xml中添加

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--filpInterval 设置View之间切换的时间间隔 (在androidStudio上面跑不起来 可以不需要)
persistentDrawingCache 持久化绘画缓存
-->
<android.support.v4.view.ViewPager
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00000000"
android:persistentDrawingCache="animation"
android:id="@+id/viewpage"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true">
</android.support.v4.view.ViewPager> <!-- 新添加的 放导航点用的 -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_marginBottom="19dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv1"
android:src="@drawable/login_selectd"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv2"
android:src="@drawable/login_point"/>
</LinearLayout> </RelativeLayout>

② 在原来的代码的基础上添加新的代码

public class Guide extends Activity implements ViewPager.OnPageChangeListener{  // 实现监听接口

    private ViewPager vp;
private ViewPagerAdapter vpAdapter;
private List<View> views; // 导航点
private ImageView[] dots;
private int[] ids = {R.id.iv1, R.id.iv2}; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);//加载guide.xml 视图
this.initView();
this.initDots();
System.out.println("onCreate");
} // 初始化view
public void initView() {
/*
* Inflater英文意思是膨胀,在Android中应该是扩展的意思吧。
LayoutInflater的作用类似于 findViewById(),
不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!
而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。
*
* */
LayoutInflater inflater = LayoutInflater.from(this);
views = new ArrayList<View>();
views.add(inflater.inflate(R.layout.one, null)); // 加载视图1
views.add(inflater.inflate(R.layout.two, null)); // 加载视图2 vpAdapter = new ViewPagerAdapter(views, this); // 创建我们的 adapter
vp = (ViewPager) findViewById(R.id.viewpage);
vp.setAdapter(vpAdapter); // viewpage绑定 adapter
vp.setOnPageChangeListener(this); // ViewPager 监听自己
} private void initDots() { // 初始化 我们的导航点
this.dots = new ImageView[this.views.size()];
for (int i=0; i<this.views.size(); i++) {
dots[i] = (ImageView) this.findViewById(this.ids[i]);
}
} // 监听 页面滑动的方法
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
for (int i=0; i<this.ids.length; i++) {
if (position == i) {
this.dots[i].setImageResource(R.drawable.login_selectd); // 变成选中的
} else {
this.dots[i].setImageResource(R.drawable.login_point); //变成不选中的
}
}
} //选中
@Override
public void onPageSelected(int position) { } // 滑动状态改变
@Override
public void onPageScrollStateChanged(int state) { }
}

7. 添加进入按钮

① 在two.xml中添加一个按钮

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:background="@drawable/guide2"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" /> <!-- 添加进去按钮 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:orientation="horizontal"
android:gravity="center"
> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="进入"
android:id="@+id/btn_start" /> </LinearLayout> </RelativeLayout>

② 监听按钮 进去MainActivity

public class Guide extends Activity implements ViewPager.OnPageChangeListener{  // 实现监听接口

    private ViewPager vp;
private ViewPagerAdapter vpAdapter;
private List<View> views; // 导航点
private ImageView[] dots;
private int[] ids = {R.id.iv1, R.id.iv2}; // 开始按钮
private Button bt; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);//加载guide.xml 视图
this.initView();
this.initDots();
System.out.println("onCreate");
} // 初始化view
public void initView() {
/*
* Inflater英文意思是膨胀,在Android中应该是扩展的意思吧。
LayoutInflater的作用类似于 findViewById(),
不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!
而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。
*
* */
LayoutInflater inflater = LayoutInflater.from(this);
views = new ArrayList<View>();
views.add(inflater.inflate(R.layout.one, null)); // 加载视图1
views.add(inflater.inflate(R.layout.two, null)); // 加载视图2 vpAdapter = new ViewPagerAdapter(views, this); // 创建我们的 adapter
vp = (ViewPager) findViewById(R.id.viewpage);
vp.setAdapter(vpAdapter); // viewpage绑定 adapter
vp.setOnPageChangeListener(this); // ViewPager 监听自己 // 进入按钮
this.bt = (Button) views.get(1).findViewById(R.id.btn_start);
this.bt.setOnClickListener(new View.OnClickListener() { // 监听
@Override
public void onClick(View v) {
Intent i = new Intent(Guide.this, MainActivity.class); // 进去MainActivity
startActivity(i);
finish(); //销毁当前的Activity
}
});
} private void initDots() { // 初始化 我们的导航点
this.dots = new ImageView[this.views.size()];
for (int i=0; i<this.views.size(); i++) {
dots[i] = (ImageView) this.findViewById(this.ids[i]);
}
} // 监听 页面滑动的方法
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
for (int i=0; i<this.ids.length; i++) {
if (position == i) {
this.dots[i].setImageResource(R.drawable.login_selectd); // 变成选中的
} else {
this.dots[i].setImageResource(R.drawable.login_point); //变成不选中的
}
}
} //选中
@Override
public void onPageSelected(int position) { } // 滑动状态改变
@Override
public void onPageScrollStateChanged(int state) { }
}

ViewPager实现引导页的更多相关文章

  1. ViewPager之引导页

    一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 本文介绍ViewPager最基础的应用:在多个View之间进行切换,亦即ViewP ...

  2. ViewPager实现引导页(添加导航点,判断是否第一次进入主界面)

    1.引导页的4个界面布局,里面加载一张背景图片 插入到guide的界面布局中(这里不用fragment) guide_background_fragment1.xml <?xml version ...

  3. ViewPager滑动引导页

    ViewPager实现Animation动画引导页   http://blog.csdn.net/ye_scofield/article/details/44831357 SurfaceView实现动 ...

  4. ViewPager—01引导页的制作

    布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  5. 安卓第一次启动引导页使用ViewPager实现

    我们在安装某个APP的时候,基本都会有一个引导页的提示,他们可以打广告,或者介绍新功能的加入和使用说明等.一般都支持滑动并且下面有几个点,显示共有多少页和当前图片的位置,在IOS上这个实现起来比较简单 ...

  6. ViewPager打造轮播图(Banner)\引导页(Guide)

    今年7月时,在Github发布了一个开源的Banner库,虽然Star不多,但还是有少部分人使用. Banner效果:  昨天,有使用此库的同学提出需求,想在引导页的时候用这个库并且最后一页有进入按钮 ...

  7. Android ViewPager欢迎页+引导页+进入首页

    import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences ...

  8. android使用ViewPager实现欢迎引导页

    android使用ViewPager实现欢迎引导页 大多数APP第一次启动的时候,都会有一个引导界面,左右滑动,到最后一张,用户点击才再次进入主界面.当第二次启动的时候,则直接进入主界面. 这种效果一 ...

  9. Android特效专辑(二)——ViewPager渲染背景颜色渐变(引导页)

    Android特效专辑(二)--ViewPager渲染背景颜色渐变(引导页) 首页:http://blog.csdn.net/qq_26787115/article/details/50439020 ...

随机推荐

  1. java中异常抛出后代码还会继续执行吗

    今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢? public void add(int index, E element){ i ...

  2. 学习Redis你必须了解的数据结构——JS实现集合和ECMA6集合

    集合类似于数组,但是集合中的元素是唯一的,没有重复值的.就像你学高中数学的概念一样,集合还可以做很多比如,并集,交集,差集的计算.在ECMA6之前,JavaScript没有提供原生的Set类,所以只能 ...

  3. .net 一些开源的东东

    来自网络..版权归网络所有..Antlr ----- Website: http://www.antlr.org/ Copyright: Copyright (c) - Terence Parr Li ...

  4. 设计模式(十四)模板方法模式(Template Pattern)

    一.引言 提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简 ...

  5. C++双缓冲多线程分析大文件词频

    实习生活告一段落,我正式从一名.NET程序员转入Java阵营,不得不说刚开始用Java的东西是多么的不习惯,但是经过三个月的使用与开发,我也发现了Java的优势:不在于语言,而在于开源.这意味着有更多 ...

  6. Java - 网络编程

    Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh.     参考:  

  7. js实现toggleClass

  8. 正则表达式在iOS中的运用

    1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  9. gulp入门小记

    由于我所在的项目组一直在用gulp构建工具,而我只是在前人搭好的环境下每次运行gulp packJs来打包js,对里面的东西全然不知,刚好最近有些时间就想自己从学学将gulp怎么用于构建前端项目中,这 ...

  10. GitHub + VSTS 开源代码双向同步

    GitHub已经是全球开源代码的大本营了,通过以下统计你可以看到仅仅javascript在github就有超过32万个活动的repo.很多开发人员都会把自己的一部分代码分享到github上进行开源,一 ...