わいずふぁくとりいがプログラムの話題をウィキします。

 メトロノームは、テンポを指定すればそれを正確に教えてくれる機械だが、人間が、拍子を打てば、だいたいどれくらいのテンポなのかを教えてくれるモノは、できないだろうか。
 そんなプログラム、「ノーム・メトロ」を作ってみようと思う。

 ここでは任意のファイルをアップロードできないので、プログラム(アプリ)は、Seesaaブログから、ダウンロードできます。

プログラム開始

 平均と、今回の、テンポを表示する、エディットテキストを、縦に二つ並べるところから始める。
 画面の残りの(空いた)部分を、拍子をとってタッチすると、テンポが表示される。
 レイアウトについては後で述べるので、早速プログラムに取り掛かろう。

画面へのタッチを捕捉する


 画面の、残り(空いた)の部分へのタッチ(Down)を捕まえてみる。
 Androidの画面(Activity)へのタッチは、「onTouchEvent」をオーバライドすることで、捕らえられる。

public class MainActivity extends Activity {

	@Override
	public boolean onTouchEvent(MotionEvent event) {
	    switch (event.getAction()) {
	    case MotionEvent.ACTION_DOWN:
	        onDown(event);
	        break;
	    }
	    return super.onTouchEvent(event);
	}

 嬉しいことに、「onTouchEvent」の引数、「MoveEvent」からは、タッチされたときの、システム起動からの経過時間が取得できる。
 画面へタッチされるごとに、システムの経過時間を表示させてみよう。

	protected void onDown(MotionEvent event)
	{
		long time = event.getEventTime();
		tempoAverage.setText(String.valueOf(time));
	}
}

画面の表示物(View)に直接名前(メンバー変数)でアクセスする


 画面の表示物(View)にはIDが付けられていて、プログラムでアクセスするときには、「findViewById」で「View」のインスタンスを得る。
 これを、いちいちやらないといのは面倒なので、最初にインスタンスを得ておいて、以後、直接、名前(メンバー変数)を通じてアクセスできるようにしたい。
 これをやろうとして、メンバー変数の宣言時に、

public class MainActivity extends Activity {
	protected EditText tempoAverage = (EditText) findViewById(R.id.editText_tempoAverage);
}

とやってもダメであった。
 ここではまだ、時期尚早らしい。「onCreate」で、やらないといけないようである。

public class MainActivity extends Activity {
	protected EditText tempoAverage;
	protected EditText tempoNow;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tempoAverage = (EditText) findViewById(R.id.editText_tempoAverage);
		tempoNow = (EditText) findViewById(R.id.editText_tempoNow);
	}
}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

管理人/副管理人のみ編集できます