2011年1月5日水曜日

Android Live Wallpaper

仕事でLive Wallpaperの調査と勉強をしたのでメモに残します。
これは想像以上に面白いことができそうな機能です。
オリジナルアプリも作ってみたいと思いました。

・android2.1以上で実装する必要がある
・xmlは結構煩雑
サービスクラスを作成し、パーミッション「android:permission="android.permission.BIND_WALLPAPER"」の設定が必要
Serviceのintent-filterに/>」を設定する必要がある
meta-dataでLiveWallpaperのリソースを定義。これはres/xml/に作成。wallpaper.xmlとするのが一般的で良いと思う。

ServiceクラスはWallpaperServiceクラスを継承する。

・壁紙の解像度の取得
width:getWallpaperDesiredMinimumWidth()
height:getWallpaperDesiredMinimumHeight()

動きの処理はEngineを継承したクラスを利用する。
EngineはSurfaceViewの使い方とほぼ同じ。androidでゲームプログラミングを組んだことがある人だと、若干とっつき易い。

・各メソッドの動き
onOffsetsChangedが
スライドさせたときに呼びだされている模様
http://d.hatena.ne.jp/hyoromo/20100513/1273768279
上記のサイトで記述されているHomeScreenは違うのではないか?

取得できるoffsetはどれだけ移動したかの値。距離の差。あんま使わなさそう。

xPixelsでは、絶対値の位置が取得できるようである。

値はandroidOS2.3で確認。左端で0、右端で-320。
HomeScreenが右に一つ切り替わると、-80xPixels移動する(加算される)。

なので、0 > 変数 > -80

のような感じで現在のhomeScreenの場所を特定できると思われる。
コーディングしてみたら、やはりうまくいった。
ソースはもっと深く理解して汎用性を持たせてからUPしよう…。汚すぎ。

homeScreenが4の場合は、
HVGAの場合、width(480 × 4)のサイズの画像を用意するといいのだろう。
アプリのようにlayoutでごまかせないので、端末ごとに画像を用意する必要がある。

onOffsetsChangedメソッドで取得された値に応じて、canvasに設定するx(left)値の値を計算する。そして、canvasでxの値を設定してやるとうまく動く。あとはアニメーションを用意すればOKっぽい。

ただし、ずっとスレッドを走らせておくのは電池消費的によくない。。
なので、タッチで動かしたときだけ動作させるのが良いと思われる。

色々なLive Wallpaperアプリを見てみたけど、コカコーラのLiveWallpaperが現在の完成度では一番かな。
 興味ある人は、「cocacola」で検索してダウンロードしてみてはいかがでしょうか。かっこいいですよ。
 OpenGLを使ってグリグリ動かしているんだろうなあ。3Dプログラミングはわからんから、勉強しないといけない。


というわけでメモ終了。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...