扣丁学堂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视频教程