ロック画面とホーム画面の背景画像を切り替えて表示したい
ピノキオピー15周年記念書籍を購入したら初回出荷特典でしおりが付いていて、そのしおりにあるQRコードを読み込むと17種の楽曲にちなんだ待受画像をダウンロードできるようになっていました。どれも好きな絵だったり思い入れのある曲だったりで選ぶことはできず、全部を切り替えながら表示できたらなぁと思いました。やり方を調べてみましたがAndroidの設定アプリ標準機能ではできず、カスタムランチャーアプリを入れる方法などが出てきました。
それは何か嫌だったので他の方法を模索していると、LiveWallpaperなるものを使うと動きのある壁紙が作れるらしいということを知りました。これで画像を切り替えて表示するようにすればいけるんじゃね、と思い作ってみました。
付録の待受画像をそのまま公開するのは権利的にNGなので、私が撮った適当な写真に差し替えたものをOriginalLiveWallpaperという名前で作成してGitHubにて公開中です。
指定時間毎に切り替える
10000ミリ秒すなわち10秒ごとにフェードを発生させるようにしています。
private val frameCallback = object : Choreographer.FrameCallback {
override fun doFrame(frameTimeNanos: Long) {
if(running) {
drawFrame()
choreographer.postFrameCallback(this)
}
}
}
private val fadeRunnable = object : Runnable {
override fun run() {
isFading = true
handler.postDelayed(this, 10000)
}
}
切り替え時にフェードさせる
瞬間的な切り替えは嫌だったのでフェードさせました。drawFrame()
内に実装されています。
付録の画像は背景色が統一されていたのでそれに合わせて背景色を設定したらいい感じにフェードできました。
if (isFading) {
paint.alpha = 255 - alpha
canvas.drawBitmap(currentImg, matrix, paint)
paint.alpha = alpha
canvas.drawBitmap(nextImg, matrix, paint)
alpha += 15
if (alpha > 255) {
alpha = 0
isFading = false
currentIndex = nextIndex
nextIndex = (nextIndex + 1) % imgPath.size
}
} else {
paint.alpha = 255
canvas.drawBitmap(currentImg, matrix, paint)
}
surfaceHolder.unlockCanvasAndPost(canvas)
とりあえず完成
動く状態にはなりましたが電池の減りが早くなりました。もう少し効率的な描画をした方が良さそうです。