2013年10月15日火曜日

タッチを検出(onTouchEvent, MotionEvent)

画面をお触りされたかの検出方法について、

Activityを継承 (extends)していれば、簡単に使えます。

方法

@Override
public boolean onTouchEvent(MotionEvent event) {
}

を作成すれば、
画面をタッチされる度に作成したメソッド(onTouchEvent)が呼ばれます。


■サンプルソース

package com.example.touch;

import android.os.Bundle;
import android.app.Activity;
import android.view.MotionEvent;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout oLayout = new LinearLayout(getApplicationContext());
        setContentView(oLayout);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        String sEvent = "";
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            sEvent = "タッチ";
            break;
        case MotionEvent.ACTION_UP:
            sEvent = "離した";
            break;
        case MotionEvent.ACTION_MOVE:
            sEvent = "動かしている";
            break;
        }
        String x = String.valueOf(event.getX());
        String y = String.valueOf(event.getY());

        String sTime =String.valueOf( event.getDownTime() );

        Toast.makeText(getApplicationContext(), sEvent + " 時間:" + sTime + "横:" + x + "縦:" + y, Toast.LENGTH_SHORT).show();

        return super.onTouchEvent(event);
    }
}

■実行結果


座標の数字の単位はpxです。何px目を押されたかを返されます。
画面の幅もpxで取得できるので、相対的にどこを押されたかの計算も簡単にできます。


MotionEvent.getActionの
リアクション判定は他にもたくさんあるのですが、
よく利用するのが上の3つです。

今回は
MotionEvent.getX()
                 .getY()
                 .getAction()
                 .getDownTime()

を使いましたが
                 getPressure()
をつかうと、どれくらいの強さでタッチされたかが、
返ってくるらしいっすよ!!

詳しくはこちらで

http://developer.android.com/reference/android/view/MotionEvent.html

0 件のコメント:

コメントを投稿