最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開(kāi)發(fā)筆記之:Splash的實(shí)現(xiàn)詳解

 更新時(shí)間:2013年05月21日 10:45:15   作者:  
本篇文章是對(duì)Android中Splash的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
什么是Splash
Splash也就是應(yīng)用程序啟動(dòng)之前先啟動(dòng)一個(gè)畫(huà)面,上面簡(jiǎn)單的介紹應(yīng)用程序的廠商,廠商的LOGO,名稱(chēng)和版本等信息,多為一張圖片,顯示幾秒鐘后會(huì)自動(dòng)消息,然后顯示出應(yīng)用程序的主體頁(yè)面。在PC上,很常見(jiàn)各種平臺(tái)的應(yīng)用程序都會(huì)有,多半是一張圖片顯示在屏幕中央,如Microsoft Office系列,或者GIMP等。在各種游戲中Splash是最常見(jiàn)的,幾乎所有的游戲開(kāi)始都會(huì)有一張全屏的圖片,上面通常都顯示廠商的LOGO,游戲的名稱(chēng)等。在手機(jī)平板等移動(dòng)設(shè)備上,類(lèi)似PC的Splash很少,起碼對(duì)于Android和iOS來(lái)講原生的應(yīng)用程序都沒(méi)有這種Splash,但是不知從何時(shí)起,這種Splash開(kāi)始在第三方應(yīng)用中流行起來(lái),幾乎所有的第三方應(yīng)用程序都有啟動(dòng)Splash。這些Splash的特點(diǎn)是占滿整個(gè)屏幕,上面LOGO,廠商的名字,應(yīng)用的名字版本等,大約3到5秒后,Splash自動(dòng)消失,應(yīng)用主頁(yè)面顯示出來(lái)。很多應(yīng)用在Splash頁(yè)面也顯示加載過(guò)程。
下面談?wù)勗贏ndroid中如何實(shí)現(xiàn)Splash以及它的優(yōu)缺點(diǎn):
使用Activity作為Splash
這可能也是最常用的方式,方法就是用一個(gè)Activity,給它設(shè)置一個(gè)背景,或者要顯示的信息(廠商,LOGO,名字和版本),讓它顯示幾秒種,然后finish()掉,并啟動(dòng)應(yīng)用主體Activity。
復(fù)制代碼 代碼如下:

        <activity android:name=".SplashActivity"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:noHistory="true"
                  android:configChanges="orientation|keyboardHidden"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

復(fù)制代碼 代碼如下:

public class SplashActivity extends Activity {
    private Handler mMainHandler = new Handler() {
 @Override
 public void handleMessage(Message msg) {
     Intent intent = new Intent(Intent.ACTION_MAIN);
     intent.setClass(getApplication(), NotTomorrowActivity.class);
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     startActivity(intent);
     // overridePendingTransition must be called AFTER finish() or startActivity, or it won't work.
     overridePendingTransition(R.anim.activity_in, R.anim.splash_out);
 }
    };

    @Override
    public void onCreate(Bundle icicle) {
 super.onCreate(icicle);
 getWindow().setBackgroundDrawableResource(R.drawable.kg);
 mMainHandler.sendEmptyMessageDelayed(0, 5000);
    }

    // much easier to handle key events
    @Override
    public void onBackPressed() {
    }
}




使用Activity的優(yōu)勢(shì)在于:
容易控制KEY事件
因?yàn)樵陲@示Splash的時(shí)候,是不應(yīng)該響應(yīng)事件的,比如觸摸事件,或者BACK或者M(jìn)ENU,因?yàn)檫@是一個(gè)單獨(dú)的Activity,所以你可以很容易禁掉這些用戶事件,而不必?fù)?dān)憂影響其他邏輯,或者擔(dān)心未及時(shí)把它們重新啟用。
容易定制
因?yàn)樗且粋€(gè)單獨(dú)的Activity,所以你可以把它設(shè)置成全屏的,或者沒(méi)有TitleBar的,或者其他什么樣式與風(fēng)格。在實(shí)際使用中,幾乎所有的Splash都設(shè)置成了全屏。因?yàn)樗菃为?dú)的Activity,所以即使你的應(yīng)用不是全屏的,也沒(méi)有關(guān)系,因?yàn)橹话裇plashActivity設(shè)置成了全屏不會(huì)對(duì)其他Activity產(chǎn)生影響。
邏輯與主體邏輯分開(kāi),容易維護(hù)
如前面二點(diǎn),因?yàn)樗且粋€(gè)單獨(dú)的Activity,所有的Splash相關(guān)的邏輯都在其中,而與應(yīng)用主體的Activity是分開(kāi)的,所以Splash中的邏輯不會(huì)影響到其他的Activity,這也更容易修改和維護(hù),因?yàn)椴粫?huì)絞在一起相互影響。
使用Activity的唯一缺點(diǎn)就是它無(wú)法利用Splash顯示的時(shí)間里做數(shù)據(jù)加載。因?yàn)樗且粋€(gè)單獨(dú)的Activity,無(wú)法控制其他的Activity,并且這時(shí)其他Activity還未創(chuàng)建。
使用ViewSwitcher作為Splash
這個(gè)也可以用作Splash。ViewSwitcher是一個(gè)ViewGroup,它有二個(gè)子View,每次只能顯示其中一個(gè)。主要做法就是,Activity的RootView設(shè)置為ViewSwitcher,把一個(gè)布局(如ImageView)作為Splash作為ViewSwitcher的第一個(gè)子View;再把Activity的主體布局作為第二個(gè)子View;當(dāng)Activity啟動(dòng)時(shí),先顯示作為Splash的ImageView,過(guò)幾秒后再顯示主體布局。事實(shí)上ViewSwitcher通常用在Activity需要加載數(shù)據(jù),先顯示一個(gè)進(jìn)度條,當(dāng)有數(shù)據(jù)時(shí)再顯示真正的布局。
使用ViewSwitcher的優(yōu)勢(shì)
使用ViewSwitcher的優(yōu)勢(shì)就在于,你可以利用Splash的時(shí)間來(lái)進(jìn)行數(shù)據(jù)的加載,這樣用戶就不必在等待了Splash之后,再等待數(shù)據(jù)加載。
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/view_container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:inAnimation="@anim/activity_in"
    android:outAnimation="@anim/splash_out">
    <ImageView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/kg"
        android:scaleType="fitXY"/>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" >
  <TextView android:id="@+id/header"
      style="@style/header_text" />
     <TextView android:id="@+id/header_tip"
         style="@style/task_text" />
  <ListView android:id="@+id/task_list"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:footerDividersEnabled="true"
     android:background="@color/white"/>
 </LinearLayout>
</ViewSwitcher>

復(fù)制代碼 代碼如下:

public class NotTomorrowActivity extends Activity {
    protected static final String TAG = "NoTomorrowActivity";
    protected static final int MSG_SHOW_LAYOUT = 10;
    private static final int MENU_ADD_TASK = 0;
    private Handler mMainHandler = new Handler() {
 @Override
 public void handleMessage(Message msg) {
     switch (msg.what) {
     case MSG_SHOW_LAYOUT:
  final ViewSwitcher container = (ViewSwitcher) findViewById(R.id.view_container);
  container.showNext();
  ImageView view = (ImageView) container.getChildAt(0);
  view.setImageResource(0);
  container.removeViewAt(0);
  mSplashing = false;
  break;
     default:
  break;
     }
 }
    };
    private boolean mSplashing;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mSplashing = true;
        setContentView(R.layout.not_tomorrow_activity);
        mMainHandler.sendEmptyMessageDelayed(MSG_SHOW_LAYOUT, 5000);  
    }
       @Override
    public void onBackPressed() {
 if (!mSplashing) {
     super.onBackPressed();
 }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
 if (mSplashing) {
     return false;
 }
 menu.add(0, MENU_ADD_TASK, 0, R.string.add_hint);
 return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
 if (mSplashing) {
     return false;
 }
 return super.onPrepareOptionsMenu(menu);
    }
}




使用ViewSwitcher的缺點(diǎn)
要注意事件
必須在顯示Splash的時(shí)候禁止BACK,MENU等事件,然后再在Splash結(jié)束后把它們重新啟用。
沒(méi)辦法全屏
除非主體Activity是全屏的,否則沒(méi)辦法讓View全屏,然后再設(shè)置回。
邏輯絞在一起,難維護(hù)
就如上面的禁止和啟用事件一樣,這些東西都是在Activity中,所有的邏輯都在一個(gè)Activity中,自然難維護(hù)和修改,并且易出錯(cuò)。
推薦做法
推薦的做法是不使用Splash的,或者最多在應(yīng)用程序安裝后第一次使用,從用戶角度來(lái)講,它毫無(wú)意義,所以你看Android或iOS的原生應(yīng)用中都沒(méi)有Splash之類(lèi)的東西。應(yīng)該讓?xiě)?yīng)用直接進(jìn)入正題,讓用戶立刻進(jìn)到他最關(guān)心的頁(yè)面。同樣,應(yīng)用使用提示也是無(wú)用的東西,真正的優(yōu)秀的應(yīng)該是簡(jiǎn)潔且操作,不用學(xué)就會(huì)的,而不是搞出一大堆教程或者提示。與其花時(shí)間精力搞Splash或使用提示,還不如想想如何簡(jiǎn)化操作。

相關(guān)文章

  • android Gallery組件實(shí)現(xiàn)的iPhone圖片滑動(dòng)效果實(shí)例

    android Gallery組件實(shí)現(xiàn)的iPhone圖片滑動(dòng)效果實(shí)例

    這篇文章主要介紹了android Gallery組件實(shí)現(xiàn)的iPhone圖片滑動(dòng)效果實(shí)例,即相冊(cè)內(nèi)的圖片實(shí)現(xiàn)可左右滑動(dòng)的效果,需要的朋友可以參考下
    2014-07-07
  • 實(shí)例講解Android中的View類(lèi)以及自定義View控件的方法

    實(shí)例講解Android中的View類(lèi)以及自定義View控件的方法

    這篇文章主要介紹了Android中的View類(lèi)以及自定義View控件的方法,講解了如何繼承View類(lèi)并且展示了一個(gè)對(duì)View進(jìn)行重繪的例子,需要的朋友可以參考下
    2016-04-04
  • Android中Gallery和ImageSwitcher的使用實(shí)例

    Android中Gallery和ImageSwitcher的使用實(shí)例

    今天小編就為大家分享一篇關(guān)于Android中Gallery和ImageSwitcher的使用實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Android實(shí)現(xiàn)放大鏡效果的方法實(shí)例(附源碼)

    Android實(shí)現(xiàn)放大鏡效果的方法實(shí)例(附源碼)

    這篇文章主要給大家介紹了利用Android實(shí)現(xiàn)放大鏡效果的方法實(shí)例,文中給出了詳細(xì)的介紹和示例代碼,文章的結(jié)尾更是給出了源碼供大家下載學(xué)習(xí),有需要的朋友們下面來(lái)一起看看吧。
    2017-01-01
  • Android使用RecyclerView實(shí)現(xiàn)列表數(shù)據(jù)選擇操作

    Android使用RecyclerView實(shí)現(xiàn)列表數(shù)據(jù)選擇操作

    這篇文章主要為大家詳細(xì)介紹了Android使用RecyclerView結(jié)合CheckBox實(shí)現(xiàn)列表數(shù)據(jù)選擇操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android利用SAX對(duì)XML進(jìn)行增刪改查操作詳解

    Android利用SAX對(duì)XML進(jìn)行增刪改查操作詳解

    在項(xiàng)目中會(huì)遇到對(duì)于XML的增刪改查,下面這篇文章主要給大家介紹了關(guān)于Android利用SAX對(duì)XML進(jìn)行增刪改查操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Rocksdb?Memtable數(shù)據(jù)結(jié)構(gòu)源碼解析

    Rocksdb?Memtable數(shù)據(jù)結(jié)構(gòu)源碼解析

    這篇文章主要為大家介紹了Rocksdb?Memtable數(shù)據(jù)結(jié)構(gòu)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android高效安全加載圖片的方法詳解

    Android高效安全加載圖片的方法詳解

    Android開(kāi)發(fā)中消耗內(nèi)存較多一般都是在圖像上面,下面這篇文章主要給大家介紹了關(guān)于Android如何高效安全加載圖片的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Android獲取當(dāng)前運(yùn)行的類(lèi)名或者方法

    Android獲取當(dāng)前運(yùn)行的類(lèi)名或者方法

    這篇文章主要介紹了Android獲取當(dāng)前運(yùn)行的類(lèi)名或者方法,涉及Android操作類(lèi)與方法的技巧,需要的朋友可以參考下
    2015-05-05
  • Android模仿實(shí)現(xiàn)微博詳情頁(yè)滑動(dòng)固定頂部欄的效果實(shí)例

    Android模仿實(shí)現(xiàn)微博詳情頁(yè)滑動(dòng)固定頂部欄的效果實(shí)例

    這篇文章主要給大家介紹了關(guān)于利用Android模仿實(shí)現(xiàn)微博詳情頁(yè)滑動(dòng)固定頂部欄效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11

最新評(píng)論

遵化市| 岐山县| 宝丰县| 新乡县| 金昌市| 手游| 平利县| 宁武县| 江西省| 淳安县| 临沭县| 镇平县| 年辖:市辖区| 潮安县| 常山县| 白河县| 湘乡市| 宜川县| 札达县| 宾阳县| 彰化县| 繁昌县| 南澳县| 洛隆县| 天祝| 九寨沟县| 彭山县| 元朗区| 深州市| 辛集市| 安新县| 都兰县| 镇江市| 宿迁市| 新乐市| 任丘市| 金秀| 隆回县| 牟定县| 华蓥市| 青田县|