#スプラッシュ画面
起動した際に表示される画面です。
スプラッシュ画面は、プログラムの立ち上げが実行中である段階で表示され、
基本的には立ち上げが完了した時点でメイン画面に切り替わります。
下記画面が起動時のスプラッシュ画面です。
画像はユニティちゃんを拝借。
実装方法は2種類あり、それぞれの特徴は下記となります。
◆Activityでの実装
長所
・起動させている間に処理を実行することができる
・複雑なアニメーションなどを表現できる
欠点
・起動時に数瞬ブランクが表示される
◆Theme指定での実装
長所
・起動時に数瞬ブランクが表示される
欠点
・事前の処理が行えない
今回は特に事前処理がないので、後者ので実装を説明します。
通信で最新の情報などを取得する場合は前者の実装が良いです。
#実装
前回のソースからの変更点を記載します。 → Android開発 Hello world表示
実装時に新たに追加したファイルは
・splash.xml
・splash.png
となります。
splash.xmlには背景色とスプラッシュ用画像をセンターに表示するように記載します。
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque"
android:layout_width="match_parent"
android:layout_height="match_parent">
<item
android:drawable="@color/colorBack"/>
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/splash"/>
</item>
</layer-list>
style.xml に SplashTheme という名前でスタイルを追加します。
中では windowBackground に先ほど作成した splash.xml を指定します。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/splash</item>
</style>
</resources>
Manifestファイルの起動Acivityのthemeに先ほどのスタイルを設定します。
<activity
android:name=".MainActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
上記の設定で起動時にスプラッシュが表示されるようになりますが、
起動後のMainActivityのテーマがスプラッシュ用のテーマのままなので、
Activity内部で変更する必要があります。
また、スプラッシュ画面はコンマ数秒で終わるので、とりあえず+1秒ほど表示しています。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ここで1秒間スリープし、スプラッシュを表示させたままにする。
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
// スプラッシュthemeを通常themeに変更する
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_main);
}
出来上がりを見ると、フェードイン・フェードアウトをしたくなります。
その場合はActivityでの実装しかありません。