最終更新:
moonlight_aska 2014年07月03日(木) 00:07:54履歴
ボタンがクリックされると, Clickイベント, Touchイベント, LongClickイベントが以下の順に発生する.
(1) OnTouchイベント (MotionEvent.ACTION_DOWN)
(2) OnLongClickイベント
(3) OnTouchイベント (MotionEvent.ACTION_UP)
(4) OnClickイベント
注) 長押しクリックでなく単なるクリックの場合, 2番目のOnLongClickイベントが省略される.
(1) OnTouchイベント (MotionEvent.ACTION_DOWN)
(2) OnLongClickイベント
(3) OnTouchイベント (MotionEvent.ACTION_UP)
(4) OnClickイベント
注) 長押しクリックでなく単なるクリックの場合, 2番目のOnLongClickイベントが省略される.
ボタンをクリックするとClickイベントを発生するので, このClickイベントを処理するイベントリスナを設定する.

- findViewByIdメソッドで, 指定したリソースインデックスのIDに対応したボタンのインスタンスを取得する.
- View.OnClickListenerインタフェースを実装したオブジェクトをイベントリスナとして設定する.
- onClickメソッドにクリックされたときの処理を記述する.
package com.moonlight_aska.android.button01;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class Button01 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.button_id);
btn.setOnClickListener(new View.OnClickListener() {
// ボタンがクリックされた時のハンドラ
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// クリックされた時の処理を記述
Log.v("OnClick", "Button was clicked.");
}
});
}
}

タッチモードにおいて, ボタンをタッチするとTouchイベントを発生するので, このTouchイベントを処理するイベントリスナを設定する.
単にボタンをタッチすると, 指がタッチしたことを示すMotionEvent.ACTION_DOWNとタッチした指が離れたことを示すMotionEvent.ACTION_UPの2つのTouchイベントが発生する.

単にボタンをタッチすると, 指がタッチしたことを示すMotionEvent.ACTION_DOWNとタッチした指が離れたことを示すMotionEvent.ACTION_UPの2つのTouchイベントが発生する.
- findViewByIdメソッドで, 指定したリソースインデックスのIDに対応したボタンのインスタンスを取得する.
- View.OnTouchListenerインタフェースを実装したオブジェクトをイベントリスナとして設定する.
- onTouchメソッドにタッチされたときの処理を記述する.
package com.moonlight_aska.android.button01;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
public class Button01 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.button_id);
btn.setOnTouchListener(new View.OnTouchListener() {
// ボタンがタッチされた時のハンドラ
@Override
public void onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == MotionEvent.ACTION_DOWN) {
// 指がタッチした時の処理を記述
Log.v("OnTouch", "Touch Down");
}
else if(event.getAction() == MotionEvent.ACTION_UP) {
// タッチした指が離れた時の処理を記述
Log.v("OnTouch", "Touch Up");
}
return false;
}
});
}
}

ボタンを長押しクリックするとLongClickイベントが発生するので, このLongClickイベントを処理するイベントリスナを設定する.
- findViewByIdメソッドで, 指定したリソースインデックスのIDに対応したボタンのインスタンスを取得する.
- View.OnLongClickListenerインタフェースを実装したオブジェクトをイベントリスナとして設定する.
- onLongClickメソッドに長押しクリックされたときの処理を記述する.
package com.moonlight_aska.android.button01;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class Button01 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.button_id);
btn.setOnLongClickListener(new View.OnLongClickListener() {
// ボタンが長押しクリックされた時のハンドラ
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
// 長押しクリックされた時の処理を記述
Log.v("OnLongClick", "Button was clicked");
return false;
}
});
}
}
このページへのコメント
askaです.
ご指摘ありがとうございます.
説明はOnTouchメソッドと書いておきながら, コードはOnClick()となっていましたので, 修正しました.
連投失礼します。
Touchイベント検出で加えて
MotionEvent.ACTION_DOWNとそれ以外での判定にしてしまうとMove時に毎回処理が走ってしまいます。
MotionEvent.ACTION_UPの判定も必要でした。
Touchイベント検出ですが、
onClickではできませんでした。
public boolean onTouch(View v, MotionEvent event)
だと思います。