Local Color

六本木でソフトウェアエンジニアをしている母さんのブログ。本ブログの内容は個人的なものであり、私の所属する企業等の立場、戦略、意見を代表するものではありません。

ヨガ友アプリを作った

ヨガ友というサッカーの長友選手の本には40のヨガのポーズと、これらのポーズを悩み別(肩こり・目の疲れなど)に編成したプログラムが21収録されています。

盛りだくさんで良いのですが、プログラムのページだけ見てもポーズの詳細がないため、ポーズ詳細ページと行きつ戻りつするのが面倒だったのと、朝起きぬけや子供の寝かしつけなどの際にもさっとヨガができるように、この本を使ったアプリを作りました。もちろん個人使用のためです。

長友佑都のヨガ友(トモ) ココロとカラダを変える新感覚トレーニング

長友佑都のヨガ友(トモ) ココロとカラダを変える新感覚トレーニング

 

主な機能

  • アプリを開くとプログラム一覧が出る (画像左)
  • プログラムをタップするとポーズのページに移る (画像右)
  • 120秒までカウントアップ表示し、1秒ごとに効果音を鳴らす (ポーズ時間を数えやすくするため)
  • 120秒経過もしくは画面タップ等で次のポーズに移る
  • 戻ったり一時停止/再開ができる

f:id:ehonyomi:20170426164357p:plain

見ての通りとても単純なので、コード自体は合計1日程度、データづくり(画像のスキャンとプログラムやポーズのリスト作成)が面倒で半日程度でした。

今回つまづいたところ色々

CountDownTimer

CountDownTimerを120秒で次のポーズに移るのと画面左下のカウントアップ、音を鳴らすのに使用。
ただしこのタイマーにはpause/resumeがなさそうなので、onTickで秒数が変わるごとに別の変数に残り秒数を保存しておき、Activity.onPauseが呼ばれた時や停止ボタンが押された時には一度キャンセル、onResumeではonTickで保存しておいた残り秒数を持ったタイマーを作り直し、としています。

SoundPoolとMediaActionSound

音を探してくるのが面倒だったので最初はMediaActionSoundで組み込みの音を使おうと思ったんですが、どうもボリュームが変えられないようなので諦めて普通にSoundPoolを利用。AudioManagerでデバイスの音量を取ってきて合わせて鳴らすことにしましたが、音周りは真面目に使うならもう少しちゃんと調べる必要がありそう。

名前からリソースIDを取得

Resourcesから、getResources().getIdentifier(<name>, <defType(drawableなど)>, getPackageName())) で取れる。画像IDを取るのに使用。

Activityを足すときにはAndroidManifest.xmlも更新する

Activityを足した後にAndroidManifest.xmlに足すのを忘れて実行するとストンと落ちる、というのを毎回やらかすのをぼちぼちやめたい。

 

前回のアプリ作りはこちら。

次はTensorFlowでもやろうかと思います。