このサイトでは、分析、カスタマイズされたコンテンツ、および広告に Cookie を使用します。このサイトを引き続き閲覧すると、Cookie の使用に同意するものと見なされます。
Hi, Developers,
straightapps.com
作成日 December 26, 2017、最終更新日 July 30, 2018(冒頭部分修正;様式変更)
トップページ > Android 開発トップ > タッチ入力の取得(基本編)

ここでは、タッチイベントの検出と、タッチ位置の特定について検討しています。

Windows では、マウスやタッチの入力があると、 WM_LBUTTONDOWN ( マウスの左ボタンが押されたことの通知 ) 等のメッセージが送信され、そのパラメータに座標が付けられます。
Android の場合は、タッチイベントの発生として通知されるのではなく、 イベントが発生しているかを取りに行って、その種別の判定し、別関数にて発生座標を取得することになるようです。 ここでは、このあたりを検証しています。

このページ、および開発関連ページは、PC向けデザインとなっております。 画面サイズの小さいスマホでは、快適な表示が得られませんので、ご了承ください。
ご利用に際しては、必ず
プライバシーポリシー(免責事項等)をご参照ください。
また、本サイトが初めての方は、まずこのページの注意事項をご覧ください。

タッチ入力の取得(基本編)

投稿 December 26, 2017, 最終更新 July 30, 2018(様式変更)

ユーザーからの入力(タッチとキーダウン)は、main.cpp の
engine_handle_input(struct android_app* app, AInputEvent* event) 関数が受け取ります。
タッチされたのか、離されたのか、どの位置で発生したのか等が、AInputEvent* event にセットされています。 AInputEvent_getType(event) 関数が返す値によって、判定できます。

AInputEvent_getType 関数AINPUT_EVENT_TYPE_MOTION を返す時は、タッチイベントです。

int32_t	action = AMotionEvent_getAction(event);

で、なにが起きたのか、action に AMOTION_EVENT_ACTION_MASK を AND 演算して判断できます。

例えば、
AMOTION_EVENT_ACTION_DOWN なら、今タッチされはじめた、Windows で言えば WM_LBUTTONDOWN に当たります。 タッチに左右や中央はありませんので、私はこのとき、後述する座標情報を引数で渡す、 OnButtonDown 関数 ( MFC 風に、OnButtonDown(float x, float y) のように。 ) を作成して呼び出すようにしました。
AMOTION_EVENT_ACTION_UP なら、今離された、すなわち WM_LBUTTONUP に当たります。 同じように、座標情報を引数で渡す、OnButtonUp 関数を作成して呼び出すようにしました。 なお、この場合、「決定(動作を実行する)アップ」であるそうで、「キャンセルのアップ」という動作もあるようです。
AMOTION_EVENT_ACTION_MOVE なら、タッチしたまま移動された、つまり WM_MOUSEMOVE です。 これも同様に、座標情報を引数で渡す、OnMouseMove 関数を作成して処理することにしました。

この通知は、メインループ1回ごとに呼び出されるようで、特にムーブイベントは1タッチ(1移動)で1回通知されるのではなく、 タッチされている間じゅう反応する(同じ座標で通知される)ので、注意が必要な場合があります。

次のような呼び出しで、タッチ等が発生した座標を得られます。

float x = AMotionEvent_getX(event, 0);
float y = AMotionEvent_getY(event, 0);

返される値はデバイスのスクリーン座標で、デバイスの向きも考慮されたものとなっていました。 縦長(ポートレート)のときは左上が (0,0)となり、横長(ランドスケープ)のときもその向きでの左上が (0,0)でした。

画面を描画する OpenGL にも関係しますが、さまざまな画面サイズあり、基本は全面使用のアプリになりますから、 デバイスの画面サイズ(ピクセル数)をあらかじめ知っておいて、 割合などに変換 ( OpenGL ではピクセルではなく -1.0〜+1.0 の範囲で座標を指定します。 ) しないと、正しく処理できないでしょう。

▲ページ先頭へ


関連トピックス
関連トピックはありません。


その他のおすすめ
おすすめ記事はありません。

JavaScriptが無効です
▲ページ先頭へ

© 2017-2018 StraightApps.com 無断転載を禁じます。No reproduction without permission.