最終更新: llysfactoryll 2013年06月22日(土) 01:49:43履歴
メトロノームは、テンポを指定すればそれを正確に教えてくれる機械だが、人間が、拍子を打てば、だいたいどれくらいのテンポなのかを教えてくれるモノは、できないだろうか。
そんなプログラム、「ノーム・メトロ」を作ってみようと思う。
ここでは任意のファイルをアップロードできないので、プログラム(アプリ)は、Seesaaブログから、ダウンロードできます。
画面の、残り(空いた)の部分へのタッチ(Down)を捕まえてみる。
Androidの画面(Activity)へのタッチは、「onTouchEvent」をオーバライドすることで、捕らえられる。
嬉しいことに、「onTouchEvent」の引数、「MoveEvent」からは、タッチされたときの、システム起動からの経過時間が取得できる。
画面へタッチされるごとに、システムの経過時間を表示させてみよう。
画面の表示物(View)にはIDが付けられていて、プログラムでアクセスするときには、「findViewById」で「View」のインスタンスを得る。
これを、いちいちやらないといのは面倒なので、最初にインスタンスを得ておいて、以後、直接、名前(メンバー変数)を通じてアクセスできるようにしたい。
これをやろうとして、メンバー変数の宣言時に、
とやってもダメであった。
ここではまだ、時期尚早らしい。「onCreate」で、やらないといけないようである。
そんなプログラム、「ノーム・メトロ」を作ってみようと思う。
ここでは任意のファイルをアップロードできないので、プログラム(アプリ)は、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)には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); } }
コメントをかく