2024年、android-dice-rollDinasourMoving で Android/Kotlin を触った。普段 Web ばかりなので、ネイティブのモバイルがどんな感触か知りたかった回。どちらも Jetpack Compose で書いた。

android-dice-roll

サイコロ3つを振るアプリ。Compose の remember / mutableStateOf で状態を持って、ボタンを押すと (1..6).random() を3回引く、というだけ。

おもしろポイントは ゾロ目アラート。3つとも同じ目が出たら AlertDialog で「ゾロ目!!」を出すようにした。

if (roll1 == roll2 && roll2 == roll3) {
    showDialog = true
    return
}

getImageResource() で目に応じて dice_1dice_6 の drawable を出し分ける。Web の useState と同じ感覚で UI が組めるので、Compose は思ったよりとっつきやすかった。

DinasourMoving

ゲーム風 UI の試作。背景の上に恐竜キャラを置いて、ドラッグで動かせるようにした。

  • pointerInput + detectDragGestures でドラッグ
  • 各キャラの位置を Offset の Map で保持
  • rememberInfiniteTransition + animateFloat で、ふわふわ上下する無限アニメーション
  • 右側の LazyColumn がキャラのパレット

コミットに 微妙にふわふわ と残っているのがこのアニメーション。揺れ幅と easing をいじって「ちょうどいいふわふわ」を探していた。

学び

Web 開発者が Android に入ると、最初の壁は ビルド環境(Gradle) だった。.idea/gradle/ まわりで一回つまずくと、コードに辿り着く前に時間が溶ける。

逆に、UI 自体は Compose のおかげで宣言的で、React に慣れていればかなり地続きだった。小さいアプリから入って、Gradle の作法に慣れる のが正解そう。ゲーム的な動き(ドラッグ + アニメ)も Compose だけで案外それっぽくなったので、ちょっとしたインタラクションの実験には向いてそう。