前の節の例では、JPG ファイルを使用してスプラッシュ画面を定義しました。このメカニズムの欠点は、アプリケーションが実行されるモバイルデバイスの性能に関係なく、同じ画像が使用されてしまうことです。
モバイルデバイスのスクリーン解像度とサイズは様々です。スプラッシュ画面に 1 つの画像を使用するのではなく、その代わりにカスタムコンポーネントを定義できます。そのコンポーネントでモバイルデバイスの性能を判別し、適切な画像をスプラッシュ画面に使用します。
カスタムコンポーネントを定義するには、SplashScreenImage クラスを使用します。次に例を示します。
<?xml version="1.0" encoding="utf-8"?>
<!-- containers\mobile\myComponents\MySplashScreen.mxml -->
<s:SplashScreenImage xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">
<!-- Default splashscreen image. -->
<s:SplashScreenImageSource
source="@Embed('../assets/logoDefault.jpg')"/>
<s:SplashScreenImageSource
source="@Embed('../assets/logo240Portrait.jpg')"
dpi="240"
aspectRatio="portrait"/>
<s:SplashScreenImageSource
source="@Embed('../assets/logo240Landscape.jpg')"
dpi="240"
aspectRatio="landscape"/>
<s:SplashScreenImageSource
source="@Embed('../assets/logo160.jpg')"
dpi="160"
aspectRatio="portrait"
minResolution="960"/>
</s:SplashScreenImage>
コンポーネントの定義内で、SplashScreenImageSource クラスを使用して、スプラッシュ画面の各画像を定義します。SplashScreenImageSource.source プロパティで画像ファイルを指定します。SplashScreenImageSource の dpi、aspectRatio および minResolution プロパティで、画像の表示に必要なモバイルデバイスの性能を定義します。
例えば、最初の SplashScreenImageSource 定義では、画像の source プロパティのみを指定しています。dpi、aspectRatio および minResolution プロパティは設定されていないので、この画像はすべてのデバイスで使用できます。したがって、ここでは、デバイスの機能と一致する他の画像がない場合に表示されるデフォルトの画像を定義しています。
2 つ目と 3 つ目の SplashScreenImageSource 定義では、縦向きモードまたは横向きモードで 240 DPI のデバイス用の画像を指定しています。
最後の SplashScreenImageSource 定義では、縦向きモードで 160 DPI、かつ最低解像度が 960 ピクセルのデバイス用の画像を指定しています。minResolution プロパティの値は、Stage.stageWidth と Stage.stageHeight プロパティの大きい方の値と比較されます。2 つの値のうち大きい方の値が、minResolution プロパティ以上である必要があります。
次のモバイルアプリケーションで、このコンポーネントを使用します。
<?xml version="1.0" encoding="utf-8"?>
<!-- containers\mobile\SparkMobileSplashComp.mxml -->
<s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
firstView="views.EmployeeMainView"
splashScreenImage="myComponents.MySplashScreen">
</s:ViewNavigatorApplication>
SplashScreenImage クラスでは、デバイスの性能に最も一致する画像が自動的に判別されます。この一致確認は、各 SplashScreenImageSource 定義の dpi、aspectRatio および minResolution プロパティに基づいて行われます。
最も一致する対象を判別する手順は、次のとおりです。
モバイルデバイスの設定と一致するすべての SplashScreenImageSource 定義を判別します。次の場合に一致したと見なされます。
SplashScreenImageSource 定義で、その設定が明示的に定義されていない場合。例えば、dpi プロパティの設定がない場合は、すべてのデバイスの DPI. と一致します。
dpi または aspectRatio プロパティについては、プロパティとモバイルデバイスの対応する設定が完全に一致する必要があります。
minResolution プロパティについては、Stage.stageWidth と Stage.stageHeight プロパティの大きい方が minResolution 以上である場合に、プロパティはデバイス上の設定と一致します。
2 つ以上の SplashScreenImageSource 定義がデバイスと一致する場合は、
明示された設定が最多数のものが選択されます。例えば、SplashScreenImageSource 定義で dpi と aspectRatio プロパティの両方が指定されている定義は、dpi プロパティのみが指定されている定義よりも一致が優先されます。
引き続き 2 つ以上の一致が存在する場合は、minResolution の値が最も高いものが選択されます。
引き続き 2 つ以上の一致が存在する場合は、コンポーネント内で最初に定義されているものが選択されます。