秒針だけのアナログ時計


20130514analog_clock_3

秒針だけのアナログ時計と時分秒のデジタル時計を作りました。
アナログ時計に秒針を追加する をベースにしました。

標準のアナログ時計では、文字盤、時針、分針の3つの画像を組み合わせています。

今回は、Canvas内に矩形を描画することで、文字盤を表現しています。
秒針は、文字盤の色を変えることで、表現しています。

ソースコードは code.google に置いています。


アナログ時計に秒針を追加する


20130513analog_clock_2

標準のアナログ時計 AnalogClock に、秒針を追加する

Android には、毎分0秒ちょうど を通知する仕組み ACTION_TIME_TICK が用意されています。
標準のアナログ時計は、これを受け取って、分を刻んでいます。

Android には、秒単位を通知する仕組みはありません。
標準の デジタル時計 では、Handler#postAtTime を使って、アプリ内で秒を生成しています。

今回は、両方を組み合わせています。
デジタル時計と同様に、アプリ内で秒を生成しています。
これは、システム時計とは1秒以下のずれがあります。
ACTION_TIME_TICK を受け取ると、このずれを補正します。

ソースコードは code.google に置いています。


アナログ時計 Analog Clock


Android の UI にアナログ時計 AnalogClock がある。

レイアウトファイルに下記のように記述する。

<AnalogClock
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>

このクラス自体が Java で記述されています。
donut(v1.6) の android.widget.AnalogClock を移植した。
そのままコピーして、ユーザアプリとして、コンパイルを通るようにしたもの。

ソースコードは Google code に置いています。

時計の刻み
Android には、毎分0秒ちょうど を通知する仕組み ACTION_TIME_TICK が用意されています。
これを受け取って、分を刻んでいます。

時計の画面
下記のような3つの画像(文字盤、短針、長針)の組み合わせで出来ています。
他の画像を指定することも出来ます。

短針の描画は、下記のように回転させています。

canvas.rotate(mHour / 12.0f * 360.0f, x, y);

参考
Android Developers: AnalogClock


デジタル時計 Digital Clock


Android の UI にデジタル時計 DigitalClock がある。

レイアウトファイルに下記のように記述する。

<DigitalClock
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>

このクラス自体が Java で記述されています。
donut(v1.6) の android.widget.DigitalClock を移植した。
そのままコピーして、ユーザアプリとして、コンパイルを通るようにしたもの。

ソースコードは Google code に置いています。

下記のように、一定周期で現在時刻を読み出している。

mTicker = new Runnable() {
  public void run() {
    if (mTickerStopped) return;
    mCalendar.setTimeInMillis(System.currentTimeMillis());
    setText(DateFormat.format(mFormat, mCalendar));
    invalidate();
    long now = SystemClock.uptimeMillis();
    long next = now + (1000 - now % 1000);
    mHandler.postAtTime(mTicker, next);
  }
};

参考
Android Developers: DigitalClock