2015年3月8日日曜日

LiveWallpaper

描画テストを兼ねてLiveWallpaperを作ってみました。
元になりそうなソースはいろいろと転がっているのですが、実際にコンパイルして実行させるまでにまずいろいろと躓くこと躓くこと。

SDKサンプルを見ればいいのは解っているものの、どうもSDKのソースは余計なものが多すぎて目的の部分を知るまでにさらに他のことも知らないと解らないソースとなっているるのでほとんど目を通していません。(ダメデスね)


そしてWebに転がっている元ネタをベースに仕組みを理解しようとすると最初に書いたとおり、過去のものとなっていたり、そもそも本当に動くのか疑わしいソースも多く意外とすんなりいきません。

実際に動かしてみようと始めてから結構経ちますがようやく動く形までこぎつけました。
動く形にまでたどり着ければあとはトライアンドエラーで遊びながら進めることが出来るので精神的にとても楽になります。

実際に動かしてみると、組み込まれているLiveWallpaperを動かしてもランチャーの動作があまり遅くなっていなかったり、スクロールも滑らかだったり、実際に作ってみたものと比べても差を感じたので、描画方法に手を入れて処理を減らしたり、ボトルネックとなりそうな同期処理を外してみたり細かいところで動作を見直したりしてみてなんとなく同じぐらいになったかな?というところでようやく落ち着きました。

そうすると今度は古いAndroidでもちゃんと動くのかな?と思ってしまったのが間違いでした。

現在でも古いAndoridのバイナリーが配布されているので動作環境を構築するのは簡単なのですが、現状のエミュレータ環境がどうも不安定で表示の大きさが予想外の大きさになったり、終了時にエラーが出るようになっています。
まともな開発環境じゃないと思いつつもどうすることも出来ないので見なかったことにしています。

LiveWallpaperはAPIレベル7から対応していて、Andorid2.1から扱えると書いてあったのですが、Android2.3.3のイメージで実行してみると、どうもLiveWallpaperが設定できないようです。
Wipeさせて起動しなおしても変らず。
原因がはっきりしないというか機能的に実装されてない気がするのであきらめ、そのちょっと後のバージョンのイメージで実行させて見ました。
Android3.0のイメージで実行させてみると、とりあえず表示は行えました。
が、どうも描画の位置がおかしい。
デバッグ用のログを表示させるようにして実際の値を調べてみると確かに表示上の問題ではなく、明らかに内部的な数値の問題。
スクロールさせても位置情報は呼び出されないし、古いAndroidを知らないのでこれが正常なのかどうかも解りません。

実際の値は描画するcanvasの大きさは1280x800かな?になっていて画面のピクセル数と一致している割に、Wallpaperのサイズは巨大なサイズになっていて明らかにスクロールできそうな値がセットされています。
しかし、スクロールしても処理が動いてない様子。

原因が全くわからない上に、スマホ用のバイナリーなのでどうも一定解像度以外で動かすにはいろいろときつそうなのでもう少し新しいバイナリーにして見ました。

今度はAndroid4.0.3に。
Android4なので見た目慣れ親しんでいる形になっていて安心していたところ、これも3.0と同様に上手くスクロールしません。
ためしに普通の静止画の壁紙にしたところ、スクロールしません。
原因がわかりませんネェ。

03-08 13:59:05.906    1559-1559/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ onSurfaceChanged:width=800, height=1184
03-08 13:59:06.146    1559-1559/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ drawFrame() Pixels:(0, -240), canvas(800, 1184), size(1600, 1280)
03-08 13:59:06.225    1559-1559/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ onOffsetsChanged:xOffset=0.0, yOffset=0.5, xStep=-1.0, yStep=-1.0, xPixels=0, yPixels=-48
03-08 13:59:06.706    1559-1559/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ onOffsetsChanged:xOffset=0.0, yOffset=0.5, xStep=-1.0, yStep=-1.0, xPixels=0, yPixels=-48
03-08 13:59:06.736    1559-1559/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ drawFrame() Pixels:(0, -48), canvas(800, 1184), size(1600, 1280)
03-08 13:59:06.797    1559-1559/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ drawFrame() Pixels:(0, -48), canvas(800, 1184), size(1600, 1280)

デバッグ用の表示を抜き出したものですが、どうしてもx座標の数値は "0" となっていたいらしいです。
y座標は中心となるように補正されているので美味しいのですけどね。

最後に4.1.2のイメージで実行してみます。
縦横の回転が反応してなくたえず長辺が縦になっていますが、スクロールもしてログの内容も実際のものと変りありません。

03-08 14:27:00.693    1661-1661/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ onSurfaceChanged:width=800, height=1184
03-08 14:27:00.723    1661-1661/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ drawFrame() Pixels:(0, 0), canvas(800, 1184), size(1600, 1280)
03-08 14:27:00.993    1661-1661/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ onOffsetsChanged:xOffset=0.5, yOffset=0.5, xStep=0.25, yStep=1.0, xPixels=-400, yPixels=-48
03-08 14:27:01.013    1661-1661/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ drawFrame() Pixels:(-400, -48), canvas(800, 1184), size(1600, 1280)
03-08 14:27:01.283    1661-1661/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ onOffsetsChanged:xOffset=0.5, yOffset=0.5, xStep=0.25, yStep=1.0, xPixels=-400, yPixels=-48
03-08 14:27:01.343    1661-1661/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ drawFrame() Pixels:(-400, -48), canvas(800, 1184), size(1600, 1280)
03-08 14:27:01.633    1661-1661/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ drawFrame() Pixels:(-400, -48), canvas(800, 1184), size(1600, 1280)
03-08 14:27:01.883    1661-1661/jp.rallwell.siriuth.starlivewallpaper D/StarWallpaperService﹕ drawFrame() Pixels:(-400, -48), canvas(800, 1184), size(1600, 1280)

回転時の画面回転はどうもNEXS10のスキンはランチャーのロックがかかるようになっているみたいですね。タブレットなのに反応が無いっていうのは不明ですけど。

今回は完全に問題提議だけですけど、とりあえずの書きとめと…。

0 件のコメント:

コメントを投稿