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アプリ」らしくなってきました。


創作プログラミングの街