onTouchEvent / MotionEvent(イベントトラックボール、タッチスクリーンのイベント、キーボードイベント)

- Androidのトラックボールイベントは、
  Androidのタッチスクリーン、キーボード、トラックボールイベントの応答処理を見て、スクリーンドライバをタッチします。
  先頭からEventHub着信イベントは、イベントのEventHub抽象構造は、これにデバイスタイプキーボード、タッチスクリーン、TraceBallとを含むシステムデバイスの動作を維持します。これは、システム起動時になります()メソッドは、入力装置がキーボードである場合、またopen_deviceによりXXXXX-キーパッドを読み取り、システムの入力デバイスは、この抽象的構造に追加され提供し、すべてのデバイスのためのファイル記述子を保持するであろう。 KL対応するキーボード・デバイス・マッピング・ファイル、追加GETEVENT()メソッドは、イベントは、イベントが発生したキーボードである場合、駆動の際に起こるのを待っているデバイスの動作ファイルディスクリプタEventHubをポーリングするために使用される、地図KeyLayoutMapはマッピングに従って()メソッドの呼び出しであります対応するキースキャンコードとKeyInputQueueにキーコードとリターンにファイルを変換します。
  イベントの種類に応じて、読み取りの三つのカテゴリー(キーボード、タッチスクリーン、トラックボール)に分かれて別々に処理され、例えば、キーボードイベントdispatchKey((のKeyEvent)ev.event、0呼び出し 、0)をバインダーでフォーカスを持つようにイベントを送信しますdispatchPointer(EV、(MotionEvent)ev.eventと呼ばれているタッチスクリーンイベントである場合は、アプリケーションウィンドウは、次に起こるのを待ってキーボードイベントを継続mQueue.recycleEvent(EV)を呼び出し 、0、0)、 UP(イベントのタイプにあっ依存します、DOWN、MOVE、OUT_SIDEなど)などをキャンセルするか、指定したウィンドウが行くする権限を持っている送信するイベントとして決意処理、のために。EventHub入力装置は、カプセル化されています。

アンドロイドSurviceViewトラックボール及びタッチイベント- https://rw1314.iteye.com/blog/1254891
        @Override
        パブリックブールonTouchEvent(MotionEventイベント){
            // TODO自動生成されたメソッドスタブ
            X = event.getX(); / / X取得タッチ座標
            // Yは、タッチ座標を取得またはYはevent.getYを()=
            (描画);
            真に戻る;
        }
        
        @Override
        パブリックブールonTrackballEvent(MotionEventイベント){
            //生成されるメソッドスタブTODO自動
            X = event.getX(); //軌跡X座標取得
            Y = event.getYを(); // Yは、軌跡座標取得し
            (ドロー);
            trueに戻ります。
        }

-でのAndroidのMotionEvent含むジェスチャー事件の一連の定義:
 MotionEvent.ACTION_DOWN:画面がこのイベントをトリガするプレスへの最初の接触を検出します。
 MotionEvent.ACTION_MOVE:スクリーントリガ間の接触が移動し、トリガーの連絡先も主にその高い感度のために、画面上にとどまる、と私たちの指と私たちは移動感じていない場合でも、(まだ完全にはできませんしかし実際には、私たちの指は)常にジッタです。
 MotionEvent.ACTION_POINTER_DOWN:状態を押すと、画面が接触したときに、トリガーが押されたときに再度、新しい連絡先を持っています。
 MotionEvent.ACTION_POINTER_UP:画面上に複数のポイントがあるが押され、トリガーポイントリリース1(すなわち、最後の点は未発売であるとき)にトリガされます。
 MotionEvent.ACTION_UP:最後の接触のリリースがトリガされます。
 MotionEvent.ACTION_SCROLL:非タッチ主にマウスによってトリガスクロール、スクロールホイール、トラックボール。
 MotionEvent.ACTION_CANCELは:直接ユーザによってトリガされない場合、システムは、必要なときに機能によって、親ビューが真onInterceptTouchEvent()、バックサブビューに送信されるサブビューイベントから処理制御を戻すときに、例えば、トリガしなければなりませんビューがイベントを受け取ることはありませんACTION_CANCELイベント、。イベントACTION_UPの御馳走と考えてください。

-差onInterceptTouchEvent()関数とonTouchEvent()である:
  1、onInterceptTouchEvent()イベント(類似する前処理、もちろん、ないかもしれないプロセス)と送信方向変更イベントを処理するため、すなわちイベントがタッチを許可するかどうかを決定し続けます。イベントが通過しながらダウン(サブビュー)転送が、(現在のViewGroup内で処理されるイベントに代わって)真返す方法、そして、(すべてのサブビューイベントがタッチに参加する機会がありません)に切断されるようにそれを渡しますonTouchEvent()処理の現在のビューは、falseを戻し、(のサブビューをonInterceptTouchEventにイベントを置く)
  2、onTouchEvent()イベントを処理するために、戻り値は、このイベントの消費の現在のビュー(消費する)か否かを判断、即ちイベントを継続するかどうかのタッチイベントを処理した後、現在のビューには、また、タッチアップ(親ビュー)転送することができますが、真の見返りに、親ビューはタッチイベントに対処するため、独自のを心配する必要はありません。trueを返し、その後、親ビュー(注意に渡さ:?!消費場合は、それはとにかく、重要では感じることがあり、私はイベントのために書かれている処理コードの答えは、このような前提のACTION_MOVEまたはACTION_UPの差ですが、今までに起こったことは確かであるが起こりますあなたがACTION_DOWNを消費しない場合ACTION_DOWNは、その後、システムはACTION_MOVEまたはACTION_UPがキャプチャされないのでACTION_DOWNが、実現しなかったと思われます。)

-イベント配信プロセス
(1)全体の物流プロセスのイベントを表示します: View.dispatchEvent-> View.setOnTouchListener-> View.onTouchEvent
OnTouchListenerがnullではない、それはイベントであることを示す場合にdispatchTouchEventにOnTouchListener判断し、trueを返すだろう消費、onTouchEventが実行されることはありません。そうでない場合は、実行onTouchEvent。
(2)onTouchEventはMOVE、UP、DOWNである
 。時間1)DOWN:
    ; mPendingCheckForTap次に115ms後に送らAは、第1フラグ予備プレスを設定し、偽mHasPerformedLongPress =が設け
    UPが115ms以内にトリガされない場合はB、フラグが設定されています* PRESSED、予備プレスクリアフラグは、長押しのタスクメッセージ500-115msの検出は、遅延も発行されている。
    500msの内のC、場合は、(DOWNから開始トリガカウント)LongClickListenerがトリガーされます。
    このとき、LongClickListenerがnullでない場合は、 LongClickListener.onClickがtrueを返した場合にのみ、mHasPerformedLongPressがtrueに設定されている間のコールバックが実行され、そうでない場合mHasPerformedLongPressは依然として偽であり;
 2)移動するとき:
 主延伸は延伸場合、ユーザーコントロールかどうかを検出することです。
  115ms以内に、単にmPendingCheckForTapを除去し、
  115ms後に、フラグがプレスチェックを除去中に押すで除去される。removeLongPressCallback();
 3)UPの場合:。
 、UPトリガー115ms以内ならば、このときフラグが予備プレスAでありますUnsetPressedState、(偽)のsetPressedが行われ、setPressは、前方視界の複製方法でdispatchSetPressed受けられるようになります;
 Bが、それは長押しが発生していない、すなわち115ms、500msの間であれば、初回の除去の検出が行われますonClickのコールバック;
 C、それは後から500msのであれば、その後、2例があります:
    私はonLongClickListenerを設定し、真onLongClickListener.onClickが、その後、onClickイベントが;.トリガすることができないイベントをクリックして返され
    、その後、IIが設定されていないonLongClickListenerまたはonLongClickListener.onClickはfalseを返します。 ;まだトリガーできるイベントOnClickイベントをクリックして
 D、最終的な実装は、バックグラウンド更新をのsetPressed、その後、PRESSEDアイデンティティを削除します。

おすすめ

転載: blog.csdn.net/ShareUs/article/details/90735002