Android中的ViewPager引导页

本文介绍使用ViewPager实现应用前的引导页,主要包括:

        1.ViewPager实现

        2.添加导航点

        3.添加进入主界面按钮

        4.添加数据储存

详细代码:github.com/Baolvlv/LearnAndroid/tree/master/ViewPageDemo

1.ViewPager实现

实现步骤:(1)设置几个不同的view布局,(2)将view布局加入1个view的list内(3)通过list实例化viewPagerAdapter(4)在布局资源中查找到viewPager,设置viewPagerAdapter

将布局资源解析后加入List中:

private Listviews;

LayoutInflater inflater = LayoutInflater.from(this);

views=newArrayList();

views.add(inflater.inflate(R.layout.one,null));

views.add(inflater.inflate(R.layout.two,null));

views.add(inflater.inflate(R.layout.three,null));

创建ViewPagerAdapter类继承自PagerAdapter,重写view创建,销毁,数量,判断view是不是所需的对像,4个方法。包含context与view的构造方法

privateListviews;

privateContextcontext;

publicViewPagerAdapter(List views,Context contex){

this.views= views;

this.context= contex;

}

//当view销毁时移除

@Override

public voiddestroyItem(ViewGroup container, intposition,Object object) {

container.removeView(views.get(position));

}

//添加view

@Override

publicObjectinstantiateItem(ViewGroup container, intposition) {

container.addView(views.get(position));

returnviews.get(position);

}

//返回当前view的数量

@Override

public intgetCount() {

returnviews.size();

}

//判断当前的view是不是需要的对象

@Override

public booleanisViewFromObject(View view,Object object) {

returnview == object;

在布局资源文件中添加viewPager标签

android:id="@+id/viewpage"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:persistentDrawingCache="animation">

实例化viewPagerAdapter

vpAdapater=newViewPagerAdapter(views,this);

查找到viewpager并设置adapter

vp= (ViewPager) findViewById(R.id.viewpage);

vp.setAdapter(vpAdapater);

2.添加导航点

在父级容器添加线形布局

android:id="@+id/ll"

android:layout_width="match_parent"

android:layout_height="wrap_content"

水平排布:

android:orientation="horizontal”

水平居中:

android:gravity=“center_horizontal"

位于父级容器的底部:

android:layout_alignParentBottom=“true"

添加3个子标签,设置背景为选中与不选中的点图片

android:src="@drawable/login_point_selected"

设置变量

//储存多个ImageView的数组

privateImageView[]dots;

//储存多个ImageView ID的数组

private int[]ids= {R.id.iv1,R.id.iv2,R.id.iv3};

初始化变量

//初始化点数组,通过循环对每个点查找id后赋值,初始化数组中每个点

private voidinitDots(){

dots=newImageView[views.size()];

for(inti =0;i

dots[i] = (ImageView) findViewById(ids[i]);

}


主Activity实现onPageChangeListener接口,实现三个方法

implementsViewPager.OnPageChangeListener

在页面初始化后,为页面添加pageChangeListener监听器

//添加页面改变的回调

vp.addOnPageChangeListener(this);

页面选择后点的改变在onPageSelected方法中实现,将当前选中的点图标设为选中的图案

//当页面选择后

@Override

public voidonPageSelected(intposition) {

for(inti =0;i

if(position == i){

dots[i].setImageResource(R.drawable.login_point_selected);

}else{

dots[i].setImageResource(R.drawable.login_point);

}

//当页面滚动后方法

@Override

public voidonPageScrolled(intposition, floatpositionOffset, intpositionOffsetPixels) {

}

//当页面滚动状态改变时

@Override

public voidonPageScrollStateChanged(intstate) {

}

3.添加进入主界面按钮

在第三个引导页面的布局文件中,修改主布局为RelativeLayout,在主布局中添加位于下方居中的LinerLayout,在线形布局中添加button标签

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:orientation="horizontal"

android:layout_alignParentBottom="true">

android:id="@+id/start_btn"

android:text="进入"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

而后在view开始时,查找到按钮并设置事件监听器,启动另一个activity

//先通过view获取到包含button的布局,再通过findViewById查找到当前button

start_btn= (Button)views.get(2).findViewById(R.id.start_btn);

//设置事件监听器

start_btn.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View v) {

//设置启动下一个activity

Intent i =newIntent(Guide.this,MainActivity.class);

startActivity(i);

//结束当前activity

finish();

}

});

activity启动之前需要在AndroidManifest文件中注册

4.添加数据储存

实现初次进入应用时,从欢迎界面跳转到引导页,以后从欢迎界面跳转到主页面

(1)分别编写跳转引导页与主页面的函数,即启动相应的activity

private voidgoHome(){

Intent i =newIntent(WelcomeAct.this,MainActivity.class);

startActivity(i);

finish();

}

private voidgoGuide(){

Intent i =newIntent(WelcomeAct.this,Guide.class);

startActivity(i);

finish();

}

(2)通过SharedPreference储存标志变量,并判断情况后,通过handler发送信息

//初始化函数

private voidinit(){

//通过SharedPreference储存isFirst数据,初值为true

SharedPreferences preferences = getPreferences(MODE_PRIVATE);

isFirstIn= preferences.getBoolean("isFirstIn",true);

//如果不是初次进入,通过handler发送GO_HOME类型的,TIME延迟的信息

if(!isFirstIn){

handler.sendEmptyMessageDelayed(GO_HOME,TIME);

}else{

//如果初次进入,通过handler发送GO—_GUIDE类型的,TIME延迟的信息

handler.sendEmptyMessageDelayed(GO_GUIDE,TIME);

//通过editor修改isFirstIn的储存内容,然后提交修改

SharedPreferences.Editor editor = preferences.edit();

editor.putBoolean("isFirstIn",false);

editor.commit();

}

实例化handler,判断不同的信息执行相应的情况

//实例化handler,判断信息的类型进行相应的跳转

privateHandlerhandler=newHandler(){

@Override

public voidhandleMessage(Message msg) {

switch(msg.what){

caseGO_HOME:

goHome();

break;

caseGO_GUIDE:

goGuide();

break;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而view...
    Ten_Minutes阅读 5,733评论 1 19
  • 文/木子 前几天看到这么一篇文章,是衷曲无闻写的《我一直一个人,走在黑暗中》,感触颇深,这种经历感同身受,就想到了...
    木子色的柚子阅读 1,197评论 1 2
  • 我就知道,她回来,我就会想多。并不嫉妒也不羡慕,只是我也想找个能说话的人。 这些事,怎么说呢,不知道说什么,心里有...
    可可洛阅读 81评论 0 0
  • 教室里听课的,齐刷刷的坐着的,全是女的,这样的场景在我的记忆里还是头次出现。有年纪快奔六十的老大姐、有五十退休不...
    怡若泰然阅读 115评论 0 0