Browsing articles tagged with " MotionEvent"

タッチパネルのダブルタップや長押しを検出する

3月 20, 2011   //   by kseto   //   デバイス  //  No Comments

「タッチイベントを取得する(onTouchEventとMotionEvent)」でも紹介したように
タッチパネルのシングルタップや座標の取得はonTouchEventとMotionEventを利用することで
実現することができます。しかし、ダブルタップや長押しのように少し複雑なタッチイベントは
onTouchEventとMotionEventだけでは取得できません。

今回紹介するGestureDetectorクラスではダブルタップや長押しのような複雑なタッチイベントを簡単に取得するためのインタフェースやメソッドを提供しています。

詳しい説明はつづきからどうぞ。

Read more >>

InputEventで入力デバイスを特定する

12月 21, 2010   //   by @mhidaka   //   アプリケーション  //  1 Comment

MotionEventでマルチタッチを検出する ではidによるマルチタッチ制御の方法を紹介しました。マルチタッチ検出の導入と同時に、入力デバイスを特定するための仕組み、InputEventも追加されています。InputEventはKeyEventMotionEventの親クラスで、入力機器に関する情報を持っています。

InputDeviceの主な定数

定数名 概要
SOURCE_DPAD 513 (0x00000201)十字キー
SOURCE_KEYBOARD 257 (0x00000101)キーボード
SOURCE_MOUSE 8194 (0x00002002)マウス
SOURCE_TOUCHPAD 1048584 (0x00100008)タッチパッド
SOURCE_TOUCHSCREEN 4098 (0x00001002)タッチスクリーン
SOURCE_TRACKBALL 65540 (0x00010004)トラックボール
SOURCE_UNKNOWN 0 (0x00000000)不明なデバイス


入力デバイス(ソース)を示す定数を抜粋しました。これらの定数値はビット演算のために、キリの良い値になっていません。たとえばSOURCE_KEYBOARDは0×00000101ですが下2桁が入力デバイスの分類(SOURCE_CLASS)を表します。

入力デバイスを特定するためのInputDeviceはInputEvent(MotionEvent, KeyEvent)から取得できます。
以下はサンプルコードです
Read more >>

MotionEventでマルチタッチを検出する

12月 14, 2010   //   by @mhidaka   //   アプリケーション  //  2 Comments

MotionEventが改善され、ポインタIDが追加されました。IDで判別することで個々の指の動きを簡単に知ることができます。タッチイベントの検出・取得についてはタッチイベントを取得する(onTouchEventとMotionEvent)で解説しています。

マルチタッチの判別(ポインタIDの判別)

メソッド 概要
int getPointerCount() MotionEventでの通知ポインタ数(n)
int getPointerId(int pointerIndex) PointerIDの取得(Indexは0からn-1まで)
int findPointerIndex(int pointerId) PointerIDからポインタを特定する


MotionEventのマルチタッチ(PointerID関連)にかかわるメソッドの一部です。MotionEventについて詳細を把握されている場合、次の「MotionEvent通知タイミングと内容」を読み飛ばしても大丈夫です。「サンプルコード」を参照してください。
またAndroid 2.3から追加されたInputEventで入力デバイスが分かるようになっており、デバイス管理が改善されています(InputEventは改めて紹介予定)

MotionEvent通知タイミングと内容

MotionEventはタッチスクリーン、トラックボールなどのポインティングデバイスの動き、変化を検知してActivity,Viewなどに通知されるイベントです。ポインティングデバイスは各種デバイスで特性が異なるため、MotionEventは特性を吸収する役割も持っています。
Read more >>

タッチイベントを取得する(onTouchEventとMotionEvent)

7月 27, 2010   //   by @mhidaka   //   アプリケーション, ユーザインターフェース  //  4 Comments

Androidには様々な入力インターフェイスが備わっています。
ハードウェアキーボード、トラックボール、タッチスクリーンなどです。端末によっては複数の入力インターフェイスをサポートしていることがあります。今回は最も一般的なタッチスクリーンから、イベントを受け取る方法を解説します。

ユーザのスクリーン操作を受け取るにはonTouchEventメソッドを利用します。

ActivityとViewのTouchEvent

onTouchEventの呼び出し優先順位は上位のView>下位のView>Activityです。

クラスとメソッド 説明
Activity.onTouchEvent Viewで消費されなかった場合、呼び出される
View.onTouchEvent 上位レイヤーから順番に呼び出される

最も単純なソースコードは以下の通りです

public class touchEventActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    	Log.d("TouchEvent", "X:" + event.getX() + ",Y:" + event.getY());
    	return true;
    }
}

onTouchEventメソッドの返り値は標準でfalseですが、今回は、trueとしています。
返り値をtrueに設定すると「TouchEventを消化」したことになり、他のViewやActivityへの通知を抑制できます。

タッチパネルを指でなぞると以下のような座標値をLogcatへ出力します

07-26 16:59:22.098: DEBUG/TouchEvent(260): X:146.0,Y:320.0
07-26 16:59:22.120: DEBUG/TouchEvent(260): X:146.0,Y:316.0
07-26 16:59:22.139: DEBUG/TouchEvent(260): X:146.0,Y:316.0
07-26 16:59:24.898: DEBUG/TouchEvent(260): X:58.0,Y:154.0

MotionEventで受け取れるイベントは座標だけではなくAction(動作)など多様な情報を取り出せます。
Actionや境界値判定など続きで解説します
Read more >>

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です