Buttonにイベントをつける

Button(またはImageButton)がクリックされた時にこうしたい・・・
という処理を記述する方法。

        Button myButton = (Button)findViewById(R.id.myBtn);	// IdからButtonを取得。ImageButtonならImageButtonクラスで取得。

        myButton.setOnTouchListener(new Button.OnTouchListener() {	// タッチされた時に受ける関数を設定
        	
        	@Override
        	public boolean onTouch(View v, MotionEvent event){
        		int action = event.getAction();
        		switch(action){
        		case MotionEvent.ACTION_DOWN:{		// ボタンに触った時にここに来る
        			myDownFunc();
        			return true;
        		}
        		case MotionEvent.ACTION_UP:{		// 指がボタンから離れたらここに来る
        			myUpFunc();
        			return true;
        		}
        		}
        		return false;
        	}
        });

ところで、OnTouchListener以外に、OnClickListenerもあるので、気になって調べた。

Viewのクリックイベント - ソフトウェア雑記 さま

これによれば、OnTouchListenerは触れたと離れたそれぞれに対してイベントが来るらしい。
OnClickListenerはクリック、すなわち触れたと離れたのワンセットでイベントが来るらしい。

このほか、長押しの場合にはOnLongClickListenerというリスナーからもイベントが来るらしい。

  • 触れた
  • 長押し(長押しの場合のみ)
  • 離れた
  • クリック

の順番でイベントが来るらしい。ちなみに、長押しではコールバック関数として
OnLongTouch(View v)を用いるそうです。クリックはOnClick(View v)。

その他、trueを返すとそれ以降のイベントが飛ばないらしいです。
長押しで処理したら後はイベントいらない、、、ということでしょうか。

長押しに対応している辺りが助かりますね。
Windowsはそういうの無い(?)ですから、自分で何とかするしかないです。
組み込みのことを考慮したOSなんだなぁと感心しました。


Androidをあわてて勉強してる身分ですが、
本当に勉強になります。見知らぬ方、ありがとうございます。