Android實(shí)現(xiàn)漸變啟動(dòng)頁(yè)和帶有指示器的引導(dǎo)頁(yè)
引導(dǎo)頁(yè)是項(xiàng)目中很常見(jiàn)的東西了,在用戶下載app首次打開(kāi)后,會(huì)進(jìn)入引導(dǎo)界面,通常都是三四張圖片說(shuō)明,簡(jiǎn)單介紹下app的功能和使用方法之類(lèi),最后一張有著“進(jìn)入應(yīng)用”的按鈕,點(diǎn)擊即可進(jìn)入主頁(yè),之后打開(kāi)app則不會(huì)再次進(jìn)入啟動(dòng)頁(yè),話不多說(shuō),以下做個(gè)歸納。
效果圖:
實(shí)現(xiàn)步驟:
1.首先我們做個(gè)有漸變動(dòng)畫(huà)的啟動(dòng)頁(yè)面SplashActivity
在onCreate里設(shè)置核心方法setAlphaAnimation()
public void setAlphaAnimation(){ //生成AlphaAnimation的對(duì)象 AlphaAnimation animation= new AlphaAnimation(this); //設(shè)置動(dòng)畫(huà)的持續(xù)時(shí)間 animation.setDuration(3000); //給要漸變的控件設(shè)置動(dòng)畫(huà),比如說(shuō)imageview,textview,linearLayout之類(lèi)的 ll.setAnimation(animation); //設(shè)置動(dòng)畫(huà)監(jiān)聽(tīng),結(jié)束時(shí)跳轉(zhuǎn)到下一個(gè)頁(yè)面(首次打開(kāi)就是引導(dǎo)頁(yè)面,反之就是主頁(yè)) animation.setAnimationListener(new Animation.AnimationListener(){ public void onAnimationStart(Animation animation){ } public void onAnimationEnd(Animation animation){ jump2Activity(); } public void onAnimationRepeat(Animation animation){ } }); }
分析一下這個(gè)跳轉(zhuǎn)方法jump2Activity(),我們這里使用SharedPeference來(lái)判斷應(yīng)用是否首次打開(kāi),設(shè)變量isFirst默認(rèn)值為0,進(jìn)入引導(dǎo)頁(yè)跳轉(zhuǎn)到主頁(yè)時(shí)再把這個(gè)值設(shè)為1,這樣,每次跳轉(zhuǎn)時(shí)判斷isFirst的值,如果仍是默認(rèn)值0則為首次打開(kāi)進(jìn)入引導(dǎo)頁(yè),反之進(jìn)入主頁(yè)。
public void jump2Activity(){ SharedPreferences sharedPreference= getSharedPreferences("data", MODE_PRIVATE); String isFirst= sharedPreferences.getString("isFirst", "0"); Intent intent= new Intent(); if("0".equals(isFirst)){ intent.setClass(this, GuideActivity.class); }else{ intent.setClass(this. MainActivity.class); } startActivity(intent); finish(); }
2.接下來(lái)我們做引導(dǎo)頁(yè)面
引導(dǎo)頁(yè)面是由三個(gè)控件組成,Viewpager,圓點(diǎn)指示器的線性布局linearlayout, 最后一頁(yè)的 “進(jìn)入應(yīng)用” 按鈕。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/guide_vp" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/guide_ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="100dp" android:orientation="horizontal" /> <Button android:id="@+id/guide_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/guide_ll" android:layout_centerHorizontal="true" android:text="進(jìn)入應(yīng)用" android:layout_marginBottom="10dp" android:visibility="gone"/> </RelativeLayout>
在GuideActivity中,首先初始化引導(dǎo)圖片
/** * 初始化圖片 */ private void initImgs() { ViewPager.LayoutParams params= new ViewPager.LayoutParams(); imageViews= new ArrayList<ImageView>(); for (int i= 0; i< imgs.length; i++){ ImageView imageView= new ImageView(this); imageView.setLayoutParams(params); imageView.setImageResource(imgs[i]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageViews.add(imageView); } }
初始化底部圓點(diǎn)指示器,這里值得一提的是我們給各圓點(diǎn)設(shè)置相應(yīng)的點(diǎn)擊事件,當(dāng)點(diǎn)擊某個(gè)位置的圓點(diǎn)時(shí),viewpager自動(dòng)切換到相應(yīng)位置的圖片,不過(guò)實(shí)際應(yīng)用中這里實(shí)用性不是很大,因?yàn)閳A點(diǎn)太小,可觸摸范圍有限,點(diǎn)擊事件不太好觸發(fā)。
/** * 初始化底部圓點(diǎn)指示器 */ private void initDots() { LinearLayout layout= findViewById(R.id.guide_ll); LinearLayout.LayoutParams params= new LinearLayout.LayoutParams(20, 20); params.setMargins(10, 0, 10, 0); dotViews= new ImageView[imgs.length]; for (int i= 0; i< imageViews.size(); i++){ ImageView imageView= new ImageView(this); imageView.setLayoutParams(params); imageView.setImageResource(R.drawable.dotselector); if (i== 0){ imageView.setSelected(true); }else{ imageView.setSelected(false); } dotViews[i]= imageView; final int finalI = i; dotViews[i].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { vp.setCurrentItem(finalI); } }); layout.addView(imageView); } }
設(shè)置viewpager的滑動(dòng)事件
vp.addOnPageChangeListener(this);
生成三個(gè)方法,我們主要在onPageSelected()方法中做操作,當(dāng)某個(gè)位置的圓點(diǎn)被選中時(shí),顯示選中后的圖片,其余圓點(diǎn)顯示未選中的圖片,這里主要應(yīng)用selector控制器,至于相應(yīng)的選中未選中圓點(diǎn)圖片需要大家去找。當(dāng)滑動(dòng)到最后一個(gè)頁(yè)面時(shí),將 "進(jìn)入應(yīng)用" 的按鈕顯示,反之隱藏。
@Override public void onPageScrolled(int i, float v, int i1) {} @Override public void onPageScrollStateChanged(int i) {} @Override public void onPageSelected(int arg0) { for (int i= 0; i< dotViews.length; i++){ if (arg0== i){ dotViews[i].setSelected(true); }else { dotViews[i].setSelected(false); } if (arg0== dotViews.length- 1){ btn.setVisibility(View.VISIBLE); }else { btn.setVisibility(View.GONE); } } }
dotSelector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/focus_on" android:state_selected="true"/> <item android:drawable="@drawable/focus_nomal" android:state_selected="false"/> </selector>
在最后一個(gè)頁(yè)面點(diǎn)擊 "進(jìn)入應(yīng)用" 按鈕跳轉(zhuǎn)到主頁(yè)時(shí),將緩存中的isFirst數(shù)據(jù)改為1,以后打開(kāi)應(yīng)用則不會(huì)再進(jìn)入引導(dǎo)頁(yè)面了。
@Override public void onClick(View view) { switch (view.getId()){ case R.id.guide_btn: setisFirst(); Intent intent= new Intent(GuideActivity.this, MainActivity.class); startActivity(intent); finish(); break; } } /** * 改變首次打開(kāi)的狀態(tài) */ private void setisFirst() { SharedPreferences.Editor editor= getSharedPreferences("data", MODE_PRIVATE).edit(); editor.putString("isFirst", "1"); editor.commit(); }
至此全部完成!demo附上
源碼下載
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:RecyclerView實(shí)現(xiàn)列表倒計(jì)時(shí)
欄 目:Android
下一篇:使用RecyclerView實(shí)現(xiàn)水平列表
本文標(biāo)題:Android實(shí)現(xiàn)漸變啟動(dòng)頁(yè)和帶有指示器的引導(dǎo)頁(yè)
本文地址:http://mengdiqiu.com.cn/a1/Android/9193.html
您可能感興趣的文章
- 01-10Android自定義View之繪制圓形頭像功能
- 01-10Android實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用實(shí)現(xiàn)方法詳解
- 01-10android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)登錄
- 01-10android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
- 01-10Android 友盟第三方登錄與分享的實(shí)現(xiàn)代碼
- 01-10C++自定義API函數(shù)實(shí)現(xiàn)大數(shù)相乘算法
- 01-10如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效
- 01-10android實(shí)現(xiàn)指紋識(shí)別功能
- 01-10Emoji表情在Android JNI中的兼容性問(wèn)題詳解
- 01-10Android實(shí)現(xiàn)圓形漸變加載進(jìn)度條


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10Android自定義View之繪制圓形頭像功能
- 01-10Android實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用實(shí)現(xiàn)方
- 01-10android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
- 01-10android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)
- 01-10C++自定義API函數(shù)實(shí)現(xiàn)大數(shù)相乘算法
- 01-10Android 友盟第三方登錄與分享的實(shí)現(xiàn)代
- 01-10android實(shí)現(xiàn)指紋識(shí)別功能
- 01-10如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效
- 01-10Android實(shí)現(xiàn)圓形漸變加載進(jìn)度條
- 01-10Emoji表情在Android JNI中的兼容性問(wèn)題詳
隨機(jī)閱讀
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子