初心者用Android入門
TOP 1.はじめに 2.開発環境の構築 3.ライフサイクル 4.アプリケーション 5.GoogleMapアプリ

タッチイベント

 スマートフォンやタブレットPCなどのAndroid端末にはタッチパネルがついていて、 指でタッチすることで画面を操作することができます。 ここでは、タッチされた情報を取得するタッチイベントについて説明します。

 ここでは画面をタッチされた場所の座標を取得するアプリケーションを作成します。 まず、Eclipseを起動します。 「ファイル(F)」タブから「新規(N)」-「Androidプロジェクト」を選択します (表示されていない場合はその他(O)からAndroidプロジェクトを選択)。

今回はTouchEventというプロジェクトを作成します。 プロパティーの各項目についてはプロジェクトの作成方法を参照してください。

 ここでは、Viewクラスを継承したTouchViewクラスを新規に作成します。 Eclipseのパッケージ・エクスプローラーから、パッケージを右クリックして新規にクラスを作成します。

package com.first_android.android.touchevent;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

public class TouchView extends View {

	private float xZahyou = 0;
	private float yZahyou = 0;
	private String actionState = "";

	public TouchView(Context context) {
		super(context);
	}

	@Override
	protected void onDraw(Canvas canvas) {

		Paint p = new Paint();
		p.setAntiAlias(true);
		p.setTextSize(16);
		p.setColor(Color.WHITE);

		canvas.drawText("EVENT:" + actionState, 0, 40, p);
		canvas.drawText("X座標:" + xZahyou, 0, 80, p);
		canvas.drawText("Y座標:" + yZahyou, 0, 120, p);
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {

		xZahyou = event.getX();
		yZahyou = event.getY();

    	switch(event.getAction()){
    		case MotionEvent.ACTION_DOWN:
    			actionState = "ACTION_DOWN";
    			break;
    		case MotionEvent.ACTION_UP:
    			actionState = "ACTION_UP";
    			break;
    		case MotionEvent.ACTION_MOVE:
    			actionState = "ACTION_MOVE";
    			break;
    	}

    	this.invalidate();

    	return true;
	}
}

 ViewクラスのonDrawメソッドをオーバーライドして、描画処理を行います。 CanvasクラスのdrawTextメソッドで指定した個所にテキストを描画します。 ここで利用しているdrawTextメソッドの第1引数は 描画する文字列、第2引数第3引数は描画するテキストの原点のX座標とY座標、 第4引数は色やサイズなどのスタイルを指定したPain情報を表します。

public void drawText(String text, float x, float y, Paint paint)

 ペイント情報はPaintクラスで指定します。 まず、setAntiAliasメソッドでアンチエイリアスを行うようにします。 アンチエイリアスを行うと描画時のギザギザを目立たなくできます。 setTextSizeでテキストのサイズを、 setColorで表示色を指定します。

public void setAntiAlias(boolean aa)
public void setTextSize(float textSize)
public void setColor(int color)

 なお、onDrawメソッドを呼ぶには継承しているViewクラスのinvalidateメソッドを呼び出す必要があります。

 次にタッチされた際の処理を実装します。タッチイベントが発生した際、onTouchEventが呼び出されます。 タッチイベントが発生するとonTouchEventメソッドの引数として、 タッチした座標などのタッチ情報を表すMotionEventクラスのインスタンスが渡されます。 ここでは、ViewクラスのonTouchEventメソッドをオーバーライドしています。 MotionEventクラスのgetXメソッド、getYメソッドで画面左上を起点とした場合の タッチしたX座標とY座標を取得できます。

public final float getX()
public final float getY()

public final int getAction()

 MotionEventクラスのgetActionメソッドでタッチの状態を取得できます。 タッチの状態には以下の種類などがあります。

定数説明
MotionEvent.ACTION_DOWNタッチした瞬間の状態
MotionEvent.ACTION_UPタッチした指を離した状態
MotionEvent.ACTION_MOVEタッチした指を離さずにいる状態

 最後にinvalidateメソッドを呼び出しています。 invalidateメソッドは継承元のViewクラスで定義されています。 invalidateメソッドを呼ぶことで先ほどオーバーライドして作成したonDrawメソッドを呼び出しています。

 次にTouchEventクラスの修正を行います。

package com.first_android.android.touchevent;

import android.app.Activity;
import android.os.Bundle;

public class TouchEvent extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        TouchView touchView = new TouchView(this);
        setContentView(touchView);
    }
}

 まず、onCreateメソッドを修正します。 デフォルトではsetContentViewメソッドの引数にint型のR.layout.mainを指定していたましたが、 今回は引数に先ほど作ったTouchViewクラスを指定します。

public void setContentView(View view)
public void setContentView(int layoutResID)

 TouchViewのインスタンスを生成する際に引数にthisを指定しています。 TouchViewクラスのコンストラクタの引数はContext型です。 ここではContextクラスのサブクラスのActivityを指定します。

public void invalidate()

 Androidアプリケーションとして実行すると次のように表示されます。 画面をタッチするとタッチした個所のX座標とY座標が表示されます。

[戻る]  [TOP]  [次へ]


This website is link free.
All graphics and page design, Copyright © 初心者用Android入門

Portions of this page are modifications based on work created and shared by Google and
used according to terms described in the Creative Commons 3.0 Attribution License.