SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2018.09<<12345678910111213141516171819202122232425262728293031>>2018.11
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

最近、Androidプログラミングを始めてみたので、カテゴリに「Java」を追加した。

んで、とりあえず電卓を作ってみた。
作っていくうち、ボタン押下のイベントに OnClickListener を使っていたのだが、やはり「押した」ときに処理させたい(OnClickListenerのOnClickイベントだと押して離したときになる)。ってことで OnTouchListener を使ったが、処理するのが押したときだけと決まっているのに、いちいちイベントの頭で event.GetAction()==MotionEvent.ACTION_DOWN を判定するのは面倒だし、美しくない。ってことで、とりあえずクラスを作る。

abstract private class CalculatorOnTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN) {
onDepress(v);
return true;
}
return false;
}

protected abstract void onDepress(View v);
}


このクラスを使って、
new CalculatorOnTouchListener() {
@Override
protected void onDepress(View v) {
...(処理)...
}
};


とすれば、押されたときのイベントをシンプルに書ける。

また、数値ボタンのように、処理がほぼ同じになる処理もいちいちイベントを書くのも面倒だ。
ってことで、こんなメソッドも作る。
private final View.OnTouchListener getDigitTouchListener(final char digit) {
return new CalculatorOnTouchListener() {
@Override
protected void onDepress(View v) {
addDigit(digit, v);
}
};
}


このメソッドを使って、
((Button)findViewById(R.id.One)).setOnTouchListener(getDigitTouchListener(Digits.One));
((Button)findViewById(R.id.Two)).setOnTouchListener(getDigitTouchListener(Digits.Two));
...


とすれば、イベントのコードは先のメソッドだけで済む。


今回はとりあえず電卓だが、もっといろんなものを作ってみようと思う。

テーマ:Android - ジャンル:携帯電話・PHS
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。