亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android開發筆記之:Splash的實現詳解

2020-04-11 12:23:16
字體:
來源:轉載
供稿:網友
什么是Splash
Splash也就是應用程序啟動之前先啟動一個畫面,上面簡單的介紹應用程序的廠商,廠商的LOGO,名稱和版本等信息,多為一張圖片,顯示幾秒鐘后會自動消息,然后顯示出應用程序的主體頁面。在PC上,很常見各種平臺的應用程序都會有,多半是一張圖片顯示在屏幕中央,如Microsoft Office系列,或者GIMP等。在各種游戲中Splash是最常見的,幾乎所有的游戲開始都會有一張全屏的圖片,上面通常都顯示廠商的LOGO,游戲的名稱等。在手機平板等移動設備上,類似PC的Splash很少,起碼對于Android和iOS來講原生的應用程序都沒有這種Splash,但是不知從何時起,這種Splash開始在第三方應用中流行起來,幾乎所有的第三方應用程序都有啟動Splash。這些Splash的特點是占滿整個屏幕,上面LOGO,廠商的名字,應用的名字版本等,大約3到5秒后,Splash自動消失,應用主頁面顯示出來。很多應用在Splash頁面也顯示加載過程。
下面談談在Android中如何實現Splash以及它的優缺點:
使用Activity作為Splash
這可能也是最常用的方式,方法就是用一個Activity,給它設置一個背景,或者要顯示的信息(廠商,LOGO,名字和版本),讓它顯示幾秒種,然后finish()掉,并啟動應用主體Activity。
復制代碼 代碼如下:

        <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>

復制代碼 代碼如下:

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的優勢在于:
容易控制KEY事件
因為在顯示Splash的時候,是不應該響應事件的,比如觸摸事件,或者BACK或者MENU,因為這是一個單獨的Activity,所以你可以很容易禁掉這些用戶事件,而不必擔憂影響其他邏輯,或者擔心未及時把它們重新啟用。
容易定制
因為它是一個單獨的Activity,所以你可以把它設置成全屏的,或者沒有TitleBar的,或者其他什么樣式與風格。在實際使用中,幾乎所有的Splash都設置成了全屏。因為它是單獨的Activity,所以即使你的應用不是全屏的,也沒有關系,因為只把SplashActivity設置成了全屏不會對其他Activity產生影響。
邏輯與主體邏輯分開,容易維護
如前面二點,因為它是一個單獨的Activity,所有的Splash相關的邏輯都在其中,而與應用主體的Activity是分開的,所以Splash中的邏輯不會影響到其他的Activity,這也更容易修改和維護,因為不會絞在一起相互影響。
使用Activity的唯一缺點就是它無法利用Splash顯示的時間里做數據加載。因為它是一個單獨的Activity,無法控制其他的Activity,并且這時其他Activity還未創建。
使用ViewSwitcher作為Splash
這個也可以用作Splash。ViewSwitcher是一個ViewGroup,它有二個子View,每次只能顯示其中一個。主要做法就是,Activity的RootView設置為ViewSwitcher,把一個布局(如ImageView)作為Splash作為ViewSwitcher的第一個子View;再把Activity的主體布局作為第二個子View;當Activity啟動時,先顯示作為Splash的ImageView,過幾秒后再顯示主體布局。事實上ViewSwitcher通常用在Activity需要加載數據,先顯示一個進度條,當有數據時再顯示真正的布局。
使用ViewSwitcher的優勢
使用ViewSwitcher的優勢就在于,你可以利用Splash的時間來進行數據的加載,這樣用戶就不必在等待了Splash之后,再等待數據加載。
復制代碼 代碼如下:

<?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>

復制代碼 代碼如下:

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的缺點
要注意事件
必須在顯示Splash的時候禁止BACK,MENU等事件,然后再在Splash結束后把它們重新啟用。
沒辦法全屏
除非主體Activity是全屏的,否則沒辦法讓View全屏,然后再設置回。
邏輯絞在一起,難維護
就如上面的禁止和啟用事件一樣,這些東西都是在Activity中,所有的邏輯都在一個Activity中,自然難維護和修改,并且易出錯。
推薦做法
推薦的做法是不使用Splash的,或者最多在應用程序安裝后第一次使用,從用戶角度來講,它毫無意義,所以你看Android或iOS的原生應用中都沒有Splash之類的東西。應該讓應用直接進入正題,讓用戶立刻進到他最關心的頁面。同樣,應用使用提示也是無用的東西,真正的優秀的應該是簡潔且操作,不用學就會的,而不是搞出一大堆教程或者提示。與其花時間精力搞Splash或使用提示,還不如想想如何簡化操作。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲精品高潮| 欧美国产视频一区二区| 在线日韩日本国产亚洲| 1769国产精品| 亚洲免费视频网站| 操人视频在线观看欧美| 亚洲香蕉伊综合在人在线视看| 日韩av最新在线观看| 欧美一级大胆视频| 久久久久亚洲精品成人网小说| 国产欧美精品xxxx另类| 国产视频久久久久久久| 久久在线免费观看视频| 色香阁99久久精品久久久| 在线午夜精品自拍| 欧美日韩一区二区在线| 日韩美女写真福利在线观看| 久久成人精品一区二区三区| 欧美性猛交xxxx乱大交| 亚洲欧美制服丝袜| 欧美电影电视剧在线观看| www.日韩.com| 日本欧美在线视频| 国产区亚洲区欧美区| 国语自产精品视频在线看抢先版图片| 欧美黑人极品猛少妇色xxxxx| 国产mv免费观看入口亚洲| 国产精品青青在线观看爽香蕉| 亚洲自拍高清视频网站| 国产亚洲激情在线| 亚洲香蕉av在线一区二区三区| 国产精品视频永久免费播放| 久久99国产综合精品女同| 亚洲午夜女主播在线直播| 成人写真福利网| 亚洲高清av在线| 国产精选久久久久久| 日韩专区在线播放| 日韩在线资源网| 国产欧美一区二区三区在线| 久久综合伊人77777| 亚洲欧美国产高清va在线播| 国产情人节一区| 色偷偷88888欧美精品久久久| 亚洲精品一区中文| 奇米影视亚洲狠狠色| 国产精品欧美日韩久久| 欧美日韩国产色| 欧美www视频在线观看| 色七七影院综合| 日本一区二区三区四区视频| 国产在线a不卡| 欧美激情视频播放| 亚洲精品一区二区久| 成人免费看黄网站| 日韩精品在线视频美女| 国产精品视频久久| 久久久www成人免费精品张筱雨| 国产高清视频一区三区| 亚洲人成电影网| 国产精品视频自在线| 国产97在线播放| 日韩欧美国产激情| 国产精品久久久久久影视| 国产日韩综合一区二区性色av| 国产精品久久久久av| 欧美伊久线香蕉线新在线| 日韩免费在线视频| 91在线观看免费高清完整版在线观看| 伊人久久久久久久久久| 久久久久国产视频| 亚洲一区国产精品| 亚洲一区中文字幕在线观看| 国产精品视频一| 国产美女精品视频免费观看| 久久中文字幕一区| 国产视频丨精品|在线观看| 日本亚洲欧美成人| 亚洲免费精彩视频| 疯狂欧美牲乱大交777| 精品二区三区线观看| 538国产精品一区二区免费视频| 日韩一区av在线| 日本一欧美一欧美一亚洲视频| 国产精品久久久久久五月尺| 亚洲欧美在线免费观看| 中文字幕成人在线| 久久精品国产成人精品| 中文字幕在线观看亚洲| 国产欧美精品在线| 日韩欧美成人精品| 一区二区三区视频在线| 国产精品午夜国产小视频| 欧美黑人性视频| 91午夜在线播放| 亚洲国产成人在线视频| 日韩亚洲欧美成人| 在线成人免费网站| 国产婷婷色综合av蜜臀av| 欧美色道久久88综合亚洲精品| 国产精品永久免费在线| 亚洲网在线观看| 久久久久久久久久久久av| 久久精品国产免费观看| 高清视频欧美一级| 91精品中文在线| 成人久久久久久久| 国产成人a亚洲精品| 日韩大胆人体377p| 久久久之久亚州精品露出| 亚洲福利在线视频| 亚洲成av人影院在线观看| 少妇av一区二区三区| 国产精品久久久久国产a级| 久久久久久久亚洲精品| 亚洲夜晚福利在线观看| 欧美与黑人午夜性猛交久久久| 久久久久北条麻妃免费看| 日韩欧美在线视频日韩欧美在线视频| 欧美视频在线免费看| 国产欧美一区二区三区久久人妖| 亚洲一区二区三区视频播放| 国产精品免费一区| 狠狠久久五月精品中文字幕| 91视频国产一区| 欧美精品电影免费在线观看| 亚洲丁香婷深爱综合| 伦伦影院午夜日韩欧美限制| 91最新国产视频| 97在线视频精品| 在线视频一区二区| 大胆人体色综合| 91精品国产91久久久久久| 人体精品一二三区| 久久成人综合视频| 久久久久久久久久久成人| 亚洲专区在线视频| 国产视频观看一区| 色哟哟入口国产精品| 国内精品小视频在线观看| 亚洲美女福利视频网站| 亚洲精品自拍偷拍| 91在线高清免费观看| 日韩电影中文字幕| 亚洲国产精品网站| 久久99亚洲精品| 日韩电影视频免费| 成人黄色影片在线| 国产综合视频在线观看| 久久在线观看视频| 国产精品久久久av久久久| 日韩国产在线看| 国产欧美日韩91| www.欧美精品一二三区| 欧美黄色性视频| 情事1991在线| 国产日产欧美a一级在线| 久久亚洲成人精品| 精品久久久久久久久国产字幕| 性色av一区二区三区在线观看| 欧美日韩福利在线观看| 中文在线资源观看视频网站免费不卡| 在线观看欧美视频| 国产91露脸中文字幕在线|