Androidジェスチャー認識

2712 ワード

Androidのジェスチャー認識は、タッチスクリーン情報のパッケージ処理結果にほかならない.ジェスチャー認識機能を実現するには、まずOnTouchListenerインタフェースを実現するsetOnTouchListenerを設定し、最後にリロードされた関数onTouch()でMotionEventをGestureDetectorに渡して処理する必要がある、典型的な方法はgestureDetectorである.onTouchEvent(motionEvent).
ジェスチャー操作の原理を要約する
まず、Androidシステムでは、ジェスチャーインタラクションのたびに以下の順序で実行されます.
       1. タッチパネルに触れると、MotionEventイベントがトリガーされます.
       2. このイベントはOnTouchListenerによって傍受され,そのonTouch()メソッドでそのMotionEventオブジェクトを取得する.
       3. MotionEventオブジェクトをGestureDetectorでOnGestureListenerに転送します.
       4. OnGestureListenerは、オブジェクトを取得し、そのオブジェクトがカプセル化された情報に基づいて、対応するインタフェース関数に応答する.
GestureDetectorは2つのリスナーインタフェースを提供し、OnGestureListenerはクリッククラスメッセージを処理し、OnDoubleTapListenerはダブルクリッククラスメッセージを処理します.
OnGestureListenerのインタフェースには、次のものがあります.
      
      abstract boolean onDown(MotionEvent e);   //  ,          
      abstract boolean onSingleTapUp(MotionEvent e);   //  ,          (  、  、   ,        )
      abstract void onShowPress(MotionEvent e);   //  ,           ,       ,         
      abstract void onLongPress(MotionEvent e);   //  ,              ,     ,        
      abstract boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);  //  ,        ,     
      abstract boolean onFling(MotionEvente1, MotionEvent e2, float velocityX, float velocityY);  //  ,             ,        ,          

OnDoubleTapListenerのインタフェースには、次のものがあります.
abstract boolean onDoubleTap(MotionEvent e);   //  ,             ,        
abstract boolean onDoubleTapEvent(MotionEvent e);   //  ,              
abstract boolean onSingleTapConfirmed(MotionEvent e);  //    ,         ,          

上記のすべてのジェスチャーを処理する必要がない場合がありますが、便宜上、Androidは別のクラスSimpleOnGestureListenerを提供し、SimpleOnGestureListenerを継承して興味のあるジェスチャーを再ロードするだけで、内部クラスで実現できます.
ここで特に説明する必要があります.プログラムがクリックとダブルクリックを正しく認識したい場合は、onSingleTapConfirmedとonDoubleTapであり、onSingleTapUpとonDoubleTapではありません.onDoubleTapに応答する前に、必ずonSingleTapUpに応答するので、単一ダブルクリックで混同される結果になります.また、onSingleTapConfirmedに応答するプログラムには、ダブルクリックではなくクリックが必要であることを確認する必要があるため、ユーザー体験に影響を与えるため、バランスが必要であることを注意する必要があります.
また、onDownは押すだけですぐにトリガーされます.押してしばらくスライドしていないで先にonShowPressをトリガしてからonLongPressです;押したままスライドしない場合は、トリガ順はonDown->onShowPress->onLongPressです.非常に速い(スライドしない)をクリックして持ち上げると、onDown->onSingleTapUp->onSingleTapConfirmedになります.
少しゆっくり(スライドしない)をクリックして持ち上げます:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed.
さらにまとめると、
任意のジェスチャー動作は、まず1回押下(onDown)動作を実行します.
長押し(onLongPress)動作の前に必ず1回押し(onShowPress)動作を行います.
押したまま(onShowPress)動作と押した(onDown)動作の両方で、ワンリフト動作が実行されます.
長押し(onLongPress)、スクロール(onScroll)、スライド(onFling)動作の後もリフト(onSingleTapUp)動作は実行されません.