サンプルコード
Keyboard |
ボタンとかの入力を扱うサンプル |
Watch Face |
SingleDataField |
ごく単純なDataPage用で、大概の画面分割表示に対応できる、シンプルな表示。 |
Data Field |
現在のデータの取得 - Activity.info
- 現在の速度 : Activity.info.currentSpeed
現在のペースを表示する
SpeedからPaceをつくる
Activity.infoにはcurrentSpeed[m/s]しかない。(Paceは無い)
Paceはmin:sec[/km]なので、
1 / (currentSpeed / 1000)
とすれば、[s/km](float)になる。
秒(float)を◯:◯◯で表示する
SingleDataFieldでは、compute()で、戻り値にDurationオブジェクトを指定すると、そのまま◯:◯◯で表示ができるみたい。
Time::Gregorian::duration(options)を使うと、Durationオブジェクトを生成できる。
このとき、optionsにはシンボルを使って、変換元が秒なのか分なのか教える連想配列を指定する。
var val = 1 / (currentSpeed / 1000); // [sec/Km]
var options = { :seconds => val}; // valはsecで表現してます、と教える
val2 = Time.Gregorian.duration(options) // これで変換
なので、
var val = 1 / (currentSpeed *60 / 1000); // [min/Km]
var options = { :minutes => val}; // valはminで表現してます、と教える
val2 = Time.Gregorian.duration(options) // これで変換
としても同じ。(桁落ちとか無視すれば)
ボタンの入力を受け付ける
クラス InputDelegate を拡張したクラスを準備する
このクラスは、AppBaseのgetInitialView()の戻り値に登録して、関連付けする。
InputDelegateの関数 onKeyをオーバライドする。キーが押されると呼ばれる。
どのキーが押されたか、はonKeyの引数(evt)をつかって
evt.getKey()
の値で確認。
サンプルコード(Keyboard)では、ここで Toybox::WatchUiのpushViewで「Viewに書き出して」と依頼する。(ビューのスタック)
Push a View onto the View stack with pushView().
(Object) pushView(view, delegate, transition)
- view (View) プッシュするView
- delegate プッシュしたビューで、入力を扱うための入力delegate
- transition ビューが遷移するときの動作
Layout
Viewでは
onLayout()
アクティビティの計測・記録を行う
ActivityRecording を使うには、パーミッション Fit が必要。
- createSessionで作成
- startで開始
- stopで停止
- save or discard で保存・破棄して終了
Sessionの作成
(Session) createSession(options)
同時の存在できる Session オブジェクトは一つだけ。もし既に存在する(作成して、save や discard で破棄されていない)状態で createSession が呼ばれると、エラーとなる(APIドキュメントでは「既に存在するオブジェクトが返ってくる」と書いてあるように思えるが、エラーが出た。)
session = Record.createSession({:name=>"Walk", :sport=>Record.SPORT_WALKING});
- :sport (Object) : メインカテゴリ。任意(デフォルト SPORT_GENERIC )
- :subSport (Object) : サブカテゴリT。任意(デフォルト SUB_SPORT_GENERIC )
- :name (String) : Required. 名称。必須。様々なデバイスへの対応を考慮すると、15文字以内が望ましい。
シミュレータでの注意
start() を実行しても、シミュレータ上は Activity.info は null のまま。シミュレータの
Simulation -> Fit Data (Playback Fileでも可) -> Simulate Data
を実行すると、Activity.info に情報が入りだす。
シミュレータと実機の差
Dc.drawText で表示されるのは文字列。シミュレータ上は、数値や null 値も文字列に自動で変換されるが、実機では文字列以外はエラーになる。
現在時刻を使う
System モジュールの ClockTime クラスを使う
var cltm = System.getClockTime();
System.println(cltm.sec); // 秒を表示
KEY_ESCで終了させる、させない
KEY_ESCのキーを押すと、通常?終了したりする。が、Lapに使ったりもしたい。その場合は、return true とすると終了しない。ただし、必ずreturn true としてしまうと、どのボタンを触っても終了しなくなってしまうので注意する。
最終更新:2016年03月05日 12:23