2024年、android-dice-roll と DinasourMoving で 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_1〜dice_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 だけで案外それっぽくなったので、ちょっとしたインタラクションの実験には向いてそう。