1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ハマクラAdvent Calendar 2024

Day 19

【Android】オリジナルスライドショー壁紙

Posted at

ロック画面とホーム画面の背景画像を切り替えて表示したい

ピノキオピー15周年記念書籍を購入したら初回出荷特典でしおりが付いていて、そのしおりにあるQRコードを読み込むと17種の楽曲にちなんだ待受画像をダウンロードできるようになっていました。どれも好きな絵だったり思い入れのある曲だったりで選ぶことはできず、全部を切り替えながら表示できたらなぁと思いました。やり方を調べてみましたがAndroidの設定アプリ標準機能ではできず、カスタムランチャーアプリを入れる方法などが出てきました。
それは何か嫌だったので他の方法を模索していると、LiveWallpaperなるものを使うと動きのある壁紙が作れるらしいということを知りました。これで画像を切り替えて表示するようにすればいけるんじゃね、と思い作ってみました。
付録の待受画像をそのまま公開するのは権利的にNGなので、私が撮った適当な写真に差し替えたものをOriginalLiveWallpaperという名前で作成してGitHubにて公開中です。

指定時間毎に切り替える

10000ミリ秒すなわち10秒ごとにフェードを発生させるようにしています。

WallpaperService.kt
        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()内に実装されています。
付録の画像は背景色が統一されていたのでそれに合わせて背景色を設定したらいい感じにフェードできました。

WallpaperService.kt
            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)

とりあえず完成

動く状態にはなりましたが電池の減りが早くなりました。もう少し効率的な描画をした方が良さそうです。

参考

  1. WallpaperService - Android Developers
  2. システム壁紙を制御する ~ホームアプリ(ランチャーアプリ)の作り方~ - Qiita
  3. ライブ壁紙を作ってみる - WonderPlanet Developers' Blog
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?