扣丁學(xué)堂Android開發(fā)技巧之啟動屏和新功能左右導(dǎo)航邏輯代碼詳解
2018-01-31 16:03:17
1822瀏覽
今天扣丁學(xué)堂小編給大家介紹一下關(guān)于Android技巧之啟動屏+新功能左右導(dǎo)航邏輯詳解,目前相信大家都見過app的一個最常見的特性,就是新功能屬性介紹和啟動屏,一般會怎么實現(xiàn)呢,這不就打算告訴大家了么。
首先判斷是否第一次啟動app,如果是,則進入功能使用導(dǎo)航(最簡單的做法就是,左右滑動切換查看,滑動到最后一頁點擊按鈕進入首頁)。
如果不是,則顯示啟動屏,2秒之后進入首頁。邏輯是很簡單,如果有廣告怎么辦?廣告肯定是從服務(wù)器拿,但會緩存到本地,沒網(wǎng)的時候可以顯示,可以使用webview來顯示廣告,反正筆者是這樣干,具體實現(xiàn)先不說。
看看效果
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);
//判斷是否是第一次開啟應(yīng)用
booleanisfirstopen=sputils.getboolean(this,appconstants.first_open);
//如果是第一次啟動,則先進入功能引導(dǎo)頁
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啟動狀態(tài),如果為true,則進入功能導(dǎo)航,否則延遲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;
//引導(dǎo)頁圖片資源
privatestaticfinalint[]pics={r.layout.guid_view1,
r.layout.guid_view2,r.layout.guid_view3,r.layout.guid_view4};
//底部小點圖片
privateimageview[]dots;
//記錄當(dāng)前選中位置
privateintcurrentindex;
@override
protectedvoidoncreate(bundlesavedinstancestate){
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_guide);
views=newarraylist();
//初始化引導(dǎo)頁視圖列表
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();
//如果切換到后臺,就設(shè)置下次不進入功能引導(dǎo)頁
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];
//循環(huán)取得小點圖片
for(inti=0;i<pics.length;i++){
//得到一個linearlayout下面的每一個子元素
dots[i]=(imageview)ll.getchildat(i);
dots[i].setenabled(false);//都設(shè)為灰色
dots[i].setonclicklistener(this);
dots[i].settag(i);//設(shè)置位置tag,方便取出與當(dāng)前位置對應(yīng)
}
currentindex=0;
dots[currentindex].setenabled(true);//設(shè)置為白色,即選中狀態(tài)
}
/**
*設(shè)置當(dāng)前view
*
*@paramposition
*/
privatevoidsetcurview(intposition){
if(position<0||position>=pics.length){
return;
}
vp.setcurrentitem(position);
}
/**
*設(shè)置當(dāng)前指示點
*
*@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{
//當(dāng)滑動狀態(tài)改變時調(diào)用
@override
publicvoidonpagescrollstatechanged(intposition){
//arg0==1的時辰默示正在滑動,arg0==2的時辰默示滑動完畢了,arg0==0的時辰默示什么都沒做。
}
//當(dāng)前頁面被滑動時調(diào)用
@override
publicvoidonpagescrolled(intposition,floatarg1,intarg2){
//arg0:當(dāng)前頁面,及你點擊滑動的頁面
//arg1:當(dāng)前頁面偏移的百分比
//arg2:當(dāng)前頁面偏移的像素位置
}
//當(dāng)新的頁面被選中時調(diào)用
@override
publicvoidonpageselected(intposition){
//設(shè)置底部小點選中狀態(tài)
setcurdot(position);
}
}
}
代碼解析:左右滑動是使用viewpager來做的,切換4個不同的view,監(jiān)聽viewpager的頁面切換事件來更改底部指示點的切換,滑動到最后一個頁面,設(shè)置按鈕的點擊事件,點擊進入首頁。
最后想向大家強調(diào)一點,學(xué)編程基礎(chǔ)一定要打牢,所有的概念和知識點必須理解透徹,解更多請關(guān)注扣丁學(xué)堂
Android培訓(xùn)官網(wǎng)、微信公眾號平臺,扣丁學(xué)堂
Android視頻教程從零基礎(chǔ)到精通免費試聽試學(xué),就業(yè)終端服務(wù)系統(tǒng)隨時監(jiān)控學(xué)員的學(xué)習(xí)情況和效果,順利畢業(yè)后根據(jù)學(xué)員自身風(fēng)格和學(xué)習(xí)效果推薦就業(yè)。如果你想要學(xué)習(xí)Android開發(fā)工程師技術(shù)就不要再猶豫了,喜歡就付諸行動吧。
【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“Android開發(fā)技術(shù)”的相關(guān)資訊>>
標(biāo)簽:
Android開發(fā)從入門到精通
Android學(xué)習(xí)路線圖
Android培訓(xùn)
Android開發(fā)工程師
Android視頻教程