長押しを検知するには(AndroidMode編)

◆PROCESSING 逆引きリファレンス

 カテゴリー:スマホ(AndroidMode)

長押しを検知するには(AndroidMode編)

【概要】

PROCESSINGにAndroidMode を導入する事で、PROCESSINGで開発したプログラムをAndroid端末上で動かす事ができるようになります。

AndroidModeの導入については「PROCESSINGをAndroid端末で動かすには(4.0版)」記事を参照してください。

長押しとは、タップした状態で指を動かさずに画面を数秒間押し続け、そこから指を離す操作です。何かを選択する操作などに利用します。

指を離さずに押し続ける操作を「タッチアンドホールド」と呼ぶこともあります。

(画像URL:illust-AC 様:かみたまさん、amiyaoさん)

AndroidModeで画面の長押しを検知するには、surfaceTouchEvent 関数とAndroid SDKの GestureDetector # SimpleOnGestureListener を併用して判別します。

surfaceTouchEvent 関数やタッチ系イベント関数( touchStarted など)だけを利用しても頑張れば検知可能ですが、GestureDetector クラスを併用した方が楽ちんです(笑)。

GestureDetector クラスの詳細については「スワイプを検知するには(AndroidMode編)」記事を参照して下さい。

SimpleOnGestureListener を継承したクラス内で onLongPressメソッドをオーバライドする事で、長押しを検知することができるようになります。

 

【詳細】

長押しイベント

イベントvoid onLongPress( MotionEvent e ){ }

e:発生したMotionEvent

SimpleOnGestureListener を継承したクラスで、上記メソッドをオーバライドします。

こんな感じです。

このイベントはマルチタップに対応していない事に注意が必要です。2本以上の指で同時に長押しすると、イベントが呼び出されません。

また、長押しではなくタッチアンドホールドに反応するイベントとなっている点にも注意が必要です。

手元の環境で試した範囲では、おおよそ0.6秒以上タップし続けると、指を離していなくても本イベントが発生します。

指を離した時にイベントを検知したい場合や、複数の指での長押しを検知したい場合は、surfaceTouchEvent 関数やタッチ系イベント関数( touchStarted など)を利用して自力で検知する必要があります。

 

【関連記事】

 


サンプルプログラム

タッチアンドホールドを検知する例:

画面をタッチアンドホールドされたら、その座標を表示します。

<出力サンプル>

 

指を離した時に長押しを検知する例:

自力でロングタップを検知する例です。
FIRE_MILLS ミリセカンド以上、同じ場所をタップされていたら「長押し」と判定します。

onLongPressとは異なり、指を離した時に判定を行います。またMAX_POINT 本までのマルチタップに対応します。

<出力サンプル>

 


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。