Android学习之——ViewPager及应用引导页的开发

背景知识

当我们第一次安装Android应用时,有的应用会有引导页,要么是用于介绍应用的新功能,要么就是关于应用的介绍,有的甚至是推广广告等。

那么这个应用引导页是怎样实现的呢?这就得有请我们今天的主角登场了——ViewPager。


ViewPager介绍

ViewPager继承自ViewGroup类,属于android.support.v4.view包(这个包是Google提供给我们开发兼容低版本Android的包,主要功能是提供各种各样的类来向后处理View的兼容性)。

ViewPager,允许用户左右滑动来查看View。和ListView一样,不能直接将View对象呈现在ViewPager上。需实现PagerAdapter来将View适配成Page以显示到ViewPager上。ViewPager经常和Fragment同时使用,这是一种使用Page和管理Page生命周期很方便的方式。


如何使用ViewPager

1.在布局文件中添加ViewPager(注意要写android.support.v4.view.ViewPager)

1  <android.support.v4.view.ViewPager
2         android:id="@+id/viewpager"
3         android:layout_width="fill_parent"
4         android:layout_height="fill_parent" >
5     </android.support.v4.view.ViewPager>

2.加载要显示的Page

 1 private List<View> views;
 2
 3 LayoutInflater inflater = LayoutInflater.from(this);
 4 view1 = inflater.inflate(R.layout.one, null);
 5 view2 = inflater.inflate(R.layout.two, null);
 6 view3 = inflater.inflate(R.layout.three, null);
 7 views = new ArrayList<View>();
 8 views.add(view1);
 9 views.add(view2);
10 views.add(view3);

3.实例化ViewPager并设置它的Adapter。

方法1:直接在Activity中重写PagerAdapter

 1     PagerAdapter pagerAdapter = new PagerAdapter() {
 2
 3                 @Override
 4                 public boolean isViewFromObject(View arg0, Object arg1) {
 5
 6                     return arg0 == arg1;
 7                 }
 8
 9                 @Override
10                 public int getCount() {
11
12                     return views.size();
13                 }
14
15                 @Override
16                 public void destroyItem(ViewGroup container, int position,
17                         Object object) {
18                     container.removeView(views.get(position));
19
20                 }
21
22                 @Override
23                 public int getItemPosition(Object object) {
24
25                     return super.getItemPosition(object);
26                 }
27
28                 @Override
29                 public CharSequence getPageTitle(int position) {
30
31                     return titleList.get(position);
32                 }
33
34                 @Override
35                 public Object instantiateItem(ViewGroup container, int position) {
36                     container.addView(views.get(position));
37                     return viewList.get(position);
38                 }
39
40             };
41             viewPager.setAdapter(pagerAdapter);  

方法2.创建自己的PagerAdapter类继承自PagerAdapter类。

 1 public class ViewPagerAdapter extends PagerAdapter {
 2
 3     private List<View> views;
 4     private Context context;
 5
 6     /**
 7      * 构造方法
 8      * @param views
 9      * @param context
10      */
11     public ViewPagerAdapter(List<View> views, Context context) {
12
13         this.views = views;
14         this.context = context;
15     }
16     /**
17      * 销毁View
18      */
19     @Override
20     public void destroyItem(View container, int position, Object object) {
21
22         ((ViewPager) container).removeView(views.get(position));
23     }
24     /**
25      * 实例化View
26      */
27     @Override
28     public Object instantiateItem(View container, int position) {
29
30         ((ViewPager) container).addView(views.get(position));
31
32         return views.get(position);
33
34     }
35
36     @Override
37     public int getCount() {
38         return views.size();
39     }
40
41     @Override
42     public boolean isViewFromObject(View arg0, Object arg1) {
43         return (arg0 == arg1);
44     }
45
46 }

实现一个PagerAdapter,要实现以下几种方法:

instantiateItem(ViewGroup, int)         //实例化
destroyItem(ViewGroup, int, Object)   //销毁
getCount()                                     //获取总数
isViewFromObject(View, Object)         //用于确认instantiateItem是否返回了和关键对象有关的Page视图

效果展示:


使用ViewPager开发应用引导页

学会了使用ViewPager之后,开发应用引导页就没有什么难点了。关键就是:用户只有在第一次安装应用进入应用后才会有引导页,之后打开就直接进入主界面了。

所以这里要有一个判断:用户是不是第一次进入应用。将这个值存储在手机中,在这里使用SharedPreferences存储。

 1          //用SharedPreferences来存储用户是否是安装后第一次使用的值
 2         SharedPreferences perPreferences = getSharedPreferences("JohnTsai", MODE_PRIVATE);
 3         isFirstUse = perPreferences.getBoolean("isFirstUse", true);
 4         if (!isFirstUse) {
 5             //进入主界面
 6                        ...
 7         }else{
 8             //反之则跳转到引导界面
 9             ...
10             Editor editor = perPreferences.edit();
11             editor.putBoolean("isFirstUse", false);
12             editor.commit();
13         }

注意到每个引导页页面下方都有1个小黑点,用于指示当前所在页。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5
 6     <android.support.v4.view.ViewPager
 7         android:id="@+id/viewpager"
 8         android:layout_width="fill_parent"
 9         android:layout_height="fill_parent"
10         android:background="#00000000" >
11     </android.support.v4.view.ViewPager>
12
13     <LinearLayout
14         android:id="@+id/linearLayout"
15         android:layout_width="fill_parent"
16         android:layout_height="wrap_content"
17         android:layout_alignParentBottom="true"
18         android:gravity="center_horizontal"
19         android:orientation="horizontal" >
20
21         <!-- 图片下方的点 -->
22         <ImageView
23             android:id="@+id/imageView1"
24             android:layout_width="wrap_content"
25             android:layout_height="wrap_content"
26             android:src="@drawable/point_selected" />
27
28         <ImageView
29             android:id="@+id/imageView2"
30             android:layout_width="wrap_content"
31             android:layout_height="wrap_content"
32             android:src="@drawable/point_unselected" />
33
34         <ImageView
35             android:id="@+id/imageView3"
36             android:layout_width="wrap_content"
37             android:layout_height="wrap_content"
38             android:src="@drawable/point_unselected" />
39     </LinearLayout>
40
41 </RelativeLayout>

那怎样实现滑动,图片下方的点也随着改变呢?这就要实现OnPageChangeListener接口了,重写它的方法。

 1       //引导界面下面的小点,用于显示当前View是第几个
 2     private ImageView[] dots;
 3     private int[] ids = { R.id.imageView1, R.id.imageView2,R.id.imageView3 };
 4         dots = new ImageView[views.size()];
 5         for (int i = 0; i < views.size(); i++) {
 6             dots[i] = (ImageView) findViewById(ids[i]);
 7         }
 8             @Override
 9     public void onPageScrollStateChanged(int arg0) {
10
11     }
12
13     @Override
14     public void onPageScrolled(int arg0, float arg1, int arg2) {
15
16     }
17
18     @Override
19     public void onPageSelected(int arg0) {
20         for (int i = 0; i < ids.length; i++) {
21             //若当前的界面是用户选中的界面,则点设置为选中状态,反之,则为没选中状态
22             if (arg0 == i) {
23                 dots[i].setImageResource(R.drawable.point_selected);
24             } else {
25                 dots[i].setImageResource(R.drawable.point_unselected);
26             }
27         }
28     }
时间: 2024-12-10 16:21:06

Android学习之——ViewPager及应用引导页的开发的相关文章

android使用ViewPager实现欢迎引导页

android使用ViewPager实现欢迎引导页 大多数APP第一次启动的时候,都会有一个引导界面,左右滑动,到最后一张,用户点击才再次进入主界面.当第二次启动的时候,则直接进入主界面. 这种效果一般使用ViewPager实现.今天就来为大家介绍一下ViewPager的使用. 实现步骤: 使用SharedPerferences来记录是否是第一次启动APP,如果是,则转跳到Guide页面,如果不是第一次启动.就转跳到主Activity. MainActivity: 本Activity作为Logo

Android学习笔记(二):搭建安卓开发环境

① 下载 JDK 5 or JDK 6 (JRE alone is not sufficient) ->安装->设置环境变量JAVA_HOME CLASSPATH path 下载地址:Download JDK ② 下载 Eclipse 3.3 (Europa), 3.4 (Ganymede) IDE for JAVA-> 解压 下载地址:Eclipse for JAVA developer ③ 下载 Android SDK 解压-> path 里加入 SDK 包中的 tools 目

Android零基础入门第69节:ViewPager快速实现引导页

在很多APP第一次启动时都会出现引导页,在一些APP里面还会包括一些左右滑动翻页和页面轮播切换的情况.在之前也已经学习了AdapterViewFlipper和ViewFlipper,都可以很好的实现,今天继续来学习一个功能更加强大的ViewPager组件. 一.ViewPager简介 ViewPager是android扩展包v4包中的类,这个类可以让用户左右滑动切换当前的view.ViewPager继承自ViewGroup,也就是ViewPager是一个容器类,可以包含其他的View类. Vie

Viewpager实现滑动引导页原理

首先需要一个layout作为主界面,layout里面放一个viewpager作为容器盛放不同的页面.再建三个layout文件分别盛放三张图片 ? Activity里利用findViewByID找到viewpager容器 ? 利用LayoutInflater获取一个inflater,通过inflater找到盛放三个图片的xml文件,将他们作为View存放到一个列表中. ? 将列表传递给adapter. ? 建立一个adapter继承PageAdapter,复写四个必须实现的方法.

Android引导页的实现

实现原理:使用ViewPager控件(com.android.support:support-v4:22.1.1),把引导页的layout文件放进ViewPager控件就可以了. ViewPager控件本质上也是个列表控件,横向滚动,一个页面一个页面的滚动,底下并没有滚动条,所以非常适合做引导页,和页签的tap控件来做横向滚动的页面也非常常用. 首先引用 com.android.support:support-v4:22.1.1 引导页面的layout <RelativeLayout xmlns

闪屏页+引导页

实现原理: 用SharedPreferences实现.创建一个boolean的变量,默认值为true.当判断这个变量是true的时候,说明是第一次运行,就跳转到另一个引导页面,否则进入主页面. 引导页面跳转到最后一张图片时,点击某按钮发生跳转事件,回到MainActivity,此时把变量的值改成false. 引导图效果用ViewPager实现. 下面附上代码: splash.xml: <?xml version="1.0" encoding="utf-8"?&

wap2app(三)-- 添加引导页

1.在client_index.html文件中添加如下代码: <script type="text/javascript"> if(window.plus){ plusReady() }else{ document.addEventListener('plusready',plusReady,false) } function plusReady(){//这里是每次进入应用都会显示引导页,开发中要如何显示引导页视具体的情况而定. var guide = plus.webvi

android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码

Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android Srt和Ass字幕解析器 Material Design ViewPager切换变色美观效果 卡证识别 相机样式 Android炫酷爆炸效果的菜单源码 Android简洁优雅可点击的toast控件,仿手机百度 Android实现水平列表,其中的项目像风扇叶片一样移动效果 让你的RecyclerView秀出传送带效果,支持横向和纵向两种选... 一种流式布局的效果,很像我们

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

1 import android.app.Activity; 2 import android.content.Intent; 3 import android.content.SharedPreferences; 4 import android.content.SharedPreferences.Editor; 5 import android.os.Bundle; 6 import android.os.Handler; 7 8 /** 欢迎界面 */ 9 public class Wel