久々にAndroid―オリジナル時計アプリー!

ここのところ研究室で開催している講習会に追われてまともにモバイルアプリを書いてなかったので、なんか作ろうとおもってました。
そんなとき、部屋のデジタル時計が壊れていることに気づきました。ついこの前時間調整をしたのにいつの間にか2000年の1月1日にタイムスリップしていました。恐らくどこかの時間保存用の集積回路が壊れたのでしょう。それもそのはず、これまで何度も布団から落っことしてましたから。そんなわけで時計アプリでも作るかーと思いたち、さくっと作ってみました。

3年の時にちょろちょろとコピペ多用でAndroidアプリを書いていたのですが、ここのところはWordPressとjunaioの開発にばかり目が行っていました。昔はメモ帳やらRSSリーダーやら作っていたのに、もうほとんどJavaなんてわすれていてextends,implementやらから忘れていました。

レイアウトをいじるのはなんとなーく覚えていたのでささっと

res/main.xmlを開き、
LinearLayout上にAnalogClockとDigitalClockを配置。

res/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" android:background="@drawable/img1" android:id="@+id/layout" android:onClick="onClick">

    <AnalogClock
        android:id="@+id/analogClock1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.85" />

    <DigitalClock
        android:id="@+id/digitalClock1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="DigitalClock"
        android:textSize="30dp" android:layout_gravity="center_horizontal" android:textColor="#ff0000" android:shadowDx="50.0" android:shadowDy="50.0"/>

</LinearLayout>

実はこれだけで実行するとちゃんと時計アプリになります。ちゃんと時間変遷で動きます。デフォルトだと秒単位で表示してくれます。
背景真っ黒の一番シンプルな時計。これだけでも充分。

これだけじゃつまらないので同じ研究室に所属する萌木氏のイラストを背景にしようと思いました。何パターンかもらえたのでタップする度に画像が変わるものにします。
ちょっと思い出しがてらに簡単にコードを書く。

MoekiballActivty.java

package jp.sub.takelab.clock;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class MoekiballActivity extends Activity {
	int counter=1;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    public void onClick(View v){
    	View layout = findViewById(R.id.layout);
    	if(counter==1){
    		layout.setBackgroundResource(R.drawable.img1);
    		counter=2;
    	}else if(counter==2){
    		layout.setBackgroundResource(R.drawable.img2);
    		counter=3;
    	}else if(counter==3){
    		layout.setBackgroundResource(R.drawable.img3);
    		counter=4;
    	}else if(counter==4){
    		layout.setBackgroundResource(R.drawable.img4);
    		counter=5;
    	}else{
    		layout.setBackgroundResource(R.drawable.img4);
    	}
    }
}

Androidでもイベントリスナーがあったと思うんですが、単純なonClickメソッドを使います。カウンタ変数を用意し、タップによって画像を差し替えるだけ。そのときにカウンタ変数を増やしていきます。

この時findViewByIdメソッドを使って
main.xmlにおけるLinearLayoutタグの

android:id=”@+id/layout”

の部分で設定しているとこに反応して背景が変わっていくだけのコード。何も難しいことはしていません。5回タップすると一枚の画像で固定されます。これ実はランダムにすることができます。ただ今回は眠いのでこれだけにします。もうだめです。