扣丁学堂Android开发技巧之启动屏和新功能左右导航逻辑代码详解

2018-01-31 16:03:17 769浏览

  今天扣丁学堂小编给大家介绍一下关于Android技巧之启动屏+新功能左右导航逻辑详解,目前相信大家都见过app的一个最常见的特性,就是新功能属性介绍和启动屏,一般会怎么实现呢,这不就打算告诉大家了么。

首先判断是否第一次启动app,如果是,则进入功能使用导航(最简单的做法就是,左右滑动切换查看,滑动到最后一页点击按钮进入首页)。

如果不是,则显示启动屏,2秒之后进入首页。逻辑是很简单,如果有广告怎么办?广告肯定是从服务器拿,但会缓存到本地,没网的时候可以显示,可以使用webview来显示广告,反正笔者是这样干,具体实现先不说。

看看效果



splashactivity.java

[Java]查看源文件

packagecom.devilwwj.featureguide;

importandroid.app.activity;

importandroid.content.intent;

importandroid.os.bundle;

importandroid.os.handler;

importcom.devilwwj.featureguide.global.appconstants;

importcom.devilwwj.featureguide.utils.sputils;

/**

*@desc启动屏

*createdbydevilwwjon16/1/23.

*/

publicclasssplashactivityextendsactivity{

@override

protectedvoidoncreate(bundlesavedinstancestate){

super.oncreate(savedinstancestate);

//判断是否是第一次开启应用

booleanisfirstopen=sputils.getboolean(this,appconstants.first_open);

//如果是第一次启动,则先进入功能引导页

if(!isfirstopen){

intentintent=newintent(this,welcomeguideactivity.class);

startactivity(intent);

finish();

return;

}

//如果不是第一次启动app,则正常显示启动屏

setcontentview(r.layout.activity_splash);

newhandler().postdelayed(newrunnable(){

@override

publicvoidrun(){

enterhomeactivity();

}

},2000);

}

privatevoidenterhomeactivity(){

intentintent=newintent(this,mainactivity.class);

startactivity(intent);

finish();

}

}

代码解析:使用sharedpreference来保存app启动状态,如果为true,则进入功能导航,否则延迟2秒之后进入主页面。

welcomeguideactivity.java

packagecom.devilwwj.featureguide;

importandroid.app.activity;

importandroid.content.intent;

importandroid.os.bundle;

importandroid.support.v4.view.viewpager;

importandroid.support.v4.view.viewpager.onpagechangelistener;

importandroid.view.layoutinflater;

importandroid.view.view;

importandroid.view.view.onclicklistener;

importandroid.widget.button;

importandroid.widget.imageview;

importandroid.widget.linearlayout;

importcom.devilwwj.featureguide.global.appconstants;

importcom.devilwwj.featureguide.utils.sputils;

importjava.util.arraylist;

importjava.util.list;

/**

*欢迎页

*

*@authorwwj_748

*

*/

publicclasswelcomeguideactivityextendsactivityimplementsonclicklistener{

privateviewpagervp;

privateguideviewpageradapteradapter;

privatelistviews;

privatebuttonstartbtn;

//引导页图片资源

privatestaticfinalint[]pics={r.layout.guid_view1,

r.layout.guid_view2,r.layout.guid_view3,r.layout.guid_view4};

//底部小点图片

privateimageview[]dots;

//记录当前选中位置

privateintcurrentindex;

@override

protectedvoidoncreate(bundlesavedinstancestate){

super.oncreate(savedinstancestate);

setcontentview(r.layout.activity_guide);

views=newarraylist();

//初始化引导页视图列表

for(inti=0;i<pics.length;i++){

viewview=layoutinflater.from(this).inflate(pics[i],null);

if(i==pics.length-1){

startbtn=(button)view.findviewbyid(r.id.btn_login);

startbtn.settag("enter");

startbtn.setonclicklistener(this);

}

views.add(view);

}

vp=(viewpager)findviewbyid(r.id.vp_guide);

//初始化adapter

adapter=newguideviewpageradapter(views);

vp.setadapter(adapter);

vp.setonpagechangelistener(newpagechangelistener());

initdots();

}

@override

protectedvoidonresume(){

super.onresume();

}

@override

protectedvoidonpause(){

super.onpause();

//如果切换到后台,就设置下次不进入功能引导页

sputils.putboolean(welcomeguideactivity.this,appconstants.first_open,true);

finish();

}

@override

protectedvoidonstop(){

super.onstop();

}

@override

protectedvoidondestroy(){

super.ondestroy();

}

privatevoidinitdots(){

linearlayoutll=(linearlayout)findviewbyid(r.id.ll);

dots=newimageview[pics.length];

//循环取得小点图片

for(inti=0;i<pics.length;i++){

//得到一个linearlayout下面的每一个子元素

dots[i]=(imageview)ll.getchildat(i);

dots[i].setenabled(false);//都设为灰色

dots[i].setonclicklistener(this);

dots[i].settag(i);//设置位置tag,方便取出与当前位置对应

}

currentindex=0;

dots[currentindex].setenabled(true);//设置为白色,即选中状态

}

/**

*设置当前view

*

*@paramposition

*/

privatevoidsetcurview(intposition){

if(position<0||position>=pics.length){

return;

}

vp.setcurrentitem(position);

}

/**

*设置当前指示点

*

*@paramposition

*/

privatevoidsetcurdot(intposition){

if(position<0||position>pics.length||currentindex==position){

return;

}

dots[position].setenabled(true);

dots[currentindex].setenabled(false);

currentindex=position;

}

@override

publicvoidonclick(viewv){

if(v.gettag().equals("enter")){

entermainactivity();

return;

}

intposition=(integer)v.gettag();

setcurview(position);

setcurdot(position);

}

privatevoidentermainactivity(){

intentintent=newintent(welcomeguideactivity.this,

splashactivity.class);

startactivity(intent);

sputils.putboolean(welcomeguideactivity.this,appconstants.first_open,true);

finish();

}

privateclasspagechangelistenerimplementsonpagechangelistener{

//当滑动状态改变时调用

@override

publicvoidonpagescrollstatechanged(intposition){

//arg0==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。

}

//当前页面被滑动时调用

@override

publicvoidonpagescrolled(intposition,floatarg1,intarg2){

//arg0:当前页面,及你点击滑动的页面

//arg1:当前页面偏移的百分比

//arg2:当前页面偏移的像素位置

}

//当新的页面被选中时调用

@override

publicvoidonpageselected(intposition){

//设置底部小点选中状态

setcurdot(position);

}

}

}

代码解析:左右滑动是使用viewpager来做的,切换4个不同的view,监听viewpager的页面切换事件来更改底部指示点的切换,滑动到最后一个页面,设置按钮的点击事件,点击进入首页。

最后想向大家强调一点,学编程基础一定要打牢,所有的概念和知识点必须理解透彻,解更多请关注扣丁学堂Android培训官网、微信公众号平台,扣丁学堂Android视频教程从零基础到精通免费试听试学,就业终端服务系统随时监控学员的学习情况和效果,顺利毕业后根据学员自身风格和学习效果推荐就业。如果你想要学习Android开发工程师技术就不要再犹豫了,喜欢就付诸行动吧。



扣丁学堂微信公众号



【关注微信公众号获取更多学习资料】



查看更多关于“Android开发技术的相关资讯>>

标签: Android开发从入门到精通 Android学习路线图 Android培训 Android开发工程师 Android视频教程

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号