Viewのイベント処理
AndroidのViewでは、タッチやクリック、キー入力といったユーザーによる操作やシステムからの働きかけなどを「イベント」として処理することができます。
Androidにおけるイベント処理は、基本的にJava2SEと同じです。イベントのリスナーメソッドを定義するインターフェースが用意されているので、そのインターフェースを実装(implements)して「イベント処理を行うオブジェクト」を作成し、イベントを取得するViewの「EventListenner」として登録します。
試しに、「全体を塗りつぶす」描画処理を実装したViewを保持し、クリックイベントで塗りつぶし色を変更するAndroidアプリを作成してみましょう。Android SDKのライブラリでは、OnClickListenerインターフェースがクリックイベントのリスナーインターフェースとなるので、これを実装します。
Androidアプリの新規プロジェクトを作成したら、View(ViewEventTestView.java)とActivity(ViewEventTestActivity.java)のJavaソースを作成しましょう。
まず、Viewの方では背景色を保持する変数_colorを用意して、描画処理で_colorの色を設定してから全体を塗りつぶします。イベントリスナーについては、自己完結的に自分自身(Viewのクラス)で実装し、自分自身をクリック時のイベントリスナーとして登録する(setOnClickListener())形にしてみましょうか。
クリック時のイベント処理は、implementsしたOnClickListenerインターフェースのonClick()メソッド内に記述します。この中で、_colorの色を反転させて塗りつぶす色を変えてみましょう。
以下のソースでは、パッケージの指定部分は省略しています。
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.graphics.Canvas;
import android.graphics.Paint;
public class ViewEventTestView extends View implements OnClickListener {
private int _color;
public ViewEventTestView(Context context) {
super(context);
_color = 0xffff0000;
setOnClickListener(this);
}
@Override
protected void onDraw(Canvas cv) {
Paint p = new Paint();
p.setColor(_color);
cv.drawRect(0, 0, getWidth(), getHeight(), p);
}
public void onClick(View v) {
_color ^= 0x00ffffff;
invalidate();
}
}
Activityの方は、単にViewを追加するだけです。これで、Viewがアプリ全面に配置されます。
import android.app.Activity;
import android.os.Bundle;
public class ViewEventTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new ViewEventTestView(this));
}
}
実行してみると、赤い画面が出てきてクリックすると水色になるはずです。イベント処理でユーザーの操作に「応答」できるようになって、少し「Androidアプリ」らしくなってきました。