2010年になっても、Android関係の話題は盛りだくさんですね。中でも筆者が気になっている話題は、「Android at the 2010 Game Developers Conference」です。
Android Marketの登録本数は2万本を超え、その中でもゲームの割合が約20%と一番多い人気ジャンルになっています。同様に有料アプリの割合もゲームがトップです。
これを受けてか、2010年3月9〜10日にサンフランシスコで開催される「Game Developers Conference」で、Java/C++開発者向けのセッションが開催されます。ここでは、Androidチームが開発者の質問にFace to Faceで回答してくれます。日本から参加するのは難しい感じですが、こうした動きがAndroidチームによって行われるというのは喜ばしいことだと思います。
さて、今回は先月にリリースされたAndroid 2.1の新機能を解説します。Android 2.1には、動く壁紙「Live Wallpaper」機能が追加されました。
上記は今回実装したLive Wallpaperのサンプル動画です。今回は、LiveWallpaperの作り方を一通り説明します。
後ほどソースコードを引用して説明しますが、壁紙の本体は、実は記事「SurfaceViewならAndroidで高速描画ゲームが作れる」で紹介したSurfaceViewです。また、TouchEventも処理可能なので、簡単なゲームなら作れてしまいそうです。
サンプルを以下のリンクよりダウンロードして実行してみてください。
Androidには、2.1リリース時点でJITが標準で提供されていません。将来的にはJITが搭載される予定です。
今回の炎のエフェクトは、PC上のJava VMでは速度的に問題ないですが、Android上で動かすと処理の遅さが目立ってしまいます。そのため、エミュレータで動作を確認する際には、QVGA以下のAVDを専用に作成することをお勧めします。
LiveWallpaperは、以下の要素で構成されます。
定義 | 説明 |
---|---|
WallpaperService | 動く壁紙はサービスとして実行される |
WallpaperService.Engine | 壁紙の描画を行うエンジン。これが重要 |
PreferenceActivity | 壁紙設定画面(オプション) |
表1 LiveWallpaperの構成 |
実装が必須なのは、WallpaperServiceとWallpaperService.Engineです。今回は、設定画面も実装しています。
また、ライフサイクルとコールバックメソッドです。
メソッド | 説明 |
---|---|
WallpaperService#onCreateEngine() | エンジンを作成して返す必要がある |
WallpaperService.Engine#onCreate() | エンジンが生成された際に呼び出される |
WallpaperService.Engine#onDestroy() | エンジンが破棄される際に呼び出される |
WallpaperService.Engine#onSurfaceCreated() | Surfaceが生成された際に呼び出される |
WallpaperService.Engine#onSurfaceChanged() | Surfaceが変更された際に呼び出される |
WallpaperService.Engine#onSurfaceDestroyed() | Surfaceが破棄された際に呼び出される |
WallpaperService.Engine#onDesiredSizeChanged() | 壁紙サイズ変更時に呼び出される |
WallpaperService.Engine#onOffsetChanged() | 壁紙位置変更時に呼び出される |
WallpaperService.Engine#onVisibilityChanged() | 可視・不可視変更時に呼び出される |
WallpaperService.Engine#onTouchEvent() | タッチイベントを受け取れる |
表2 WallpaperServiceとEngineのコールバックメソッド |
WallpaperServiceはServiceを継承したクラスです。Serviceのライフサイクルについては、記事「常駐アプリが作成できるAndroidの“サービス”とは」を参照してください。
今回のサンプルを作成するに当たり、実装よりも設定にてこずりました。ですが、設定個所と内容が分かってしまえば問題ありません。必要な設定ファイル(XML)はいくつかあるのですが、次ページで、それらを1つずつ説明します。
Copyright © ITmedia, Inc. All Rights Reserved.