Androidプログラマへの道 〜 Moonlight 明日香 〜 - ボタンが押されると....
ボタンがクリックされると, Clickイベント, Touchイベント, LongClickイベントが以下の順に発生する.
(1) OnTouchイベント (MotionEvent.ACTION_DOWN)
(2) OnLongClickイベント
(3) OnTouchイベント (MotionEvent.ACTION_UP)
(4) OnClickイベント
注) 長押しクリックでなく単なるクリックの場合, 2番目のOnLongClickイベントが省略される.

Clickイベントを処理する

ボタンをクリックすると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イベントを発生するので, この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イベントが発生するので, この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;
      }
    });
  }
}