2013-06-29 10 views
25

Androidの2つの方法で混乱します。 は両方のメソッドがどんな種類のイベントであるか、つまり がダウンイベントかアップイベントかを示しているようです。Androidでは、MotionEventのgetAction()とgetActionMasked()の違いは何ですか?

いつ使用しますか?私はそれを読んでいるので

public void onTouchEvent(MotionEvent e) 

は、マニュアルを参照してください引用しないでください、と私は別の何かを得るための方法のいずれかに供給することができます任意のパラメータが表示されません。

public final int getAction() 

public final int getActionMasked() 

答えて

18

はい、それらの両方は、アクション(アップ/ダウン等)を返すが、getActionイベントは多少異なっていてもよく、その場合、ポインタ情報でアクションを返すことができます。 getActionMaskedは、ポインタ情報を「マスクされた」状態で「単純な」アクションを常に返します(取得しますか?)。同じイベントでgetPointerIndexを呼び出してポインタのインデックスを取得します。複数の接点(ポインタ)を持つマルチタッチデバイスでは、これが最も一般的です。ポインタインデックスは、本質的にイベントを連絡先と照合する方法です。したがって、それらを区別することができます。

+0

このポインタ情報は何ですか? –

+0

戻り値の追加のビットフィールド。アクションとポインタインデックスは同じ整数で返されます。Androidはそれらを抽出するためのビットマスクのセットを定義します(これは基本的にgetActionMaskedの機能です) –

29

getAction()は、ポインタidとイベント(すなわち、up、down、move)情報を返します。

getActionMasked()は、イベント(つまり、上、下、移動)情報を返します。他の情報はマスクされています。例えば

getAction()戻り0x0105
getActionMasked()が0x0105 & & ACTION_MASKある0x0005を返します。

  1. ACTION_MASKの値は0xFFです。次のアクションをマスクします。 UP 6
  2. ACTION_POINTER_ID_MASKの値は0xFF00ある
    • ACTION_DOWN 0、UP 1、MOVE 2
    • ACTION_POINTER_DOWN 5。ポインタIDを非推奨の定数からマスクしました。
      • ACTION_POINTER_1_DOWN 0x0005
      • ACTION_POINTER_2_DOWN 0x0105
      • ACTION_POINTER_3_DOWN 0x0205
      • ...
+0

私はそれをまだ見ません:どうして私はgetActionMasked()を使いたいのですか?それはgetAction()に対して利点がありますか? – peedee

+3

@peedee 'getAction()'では、これらの2つのデータをビットシフト/マスクする必要があります。一方、 'getActionMasked()'と 'getActionIndex()'では、それらを別々に取得します(ただし、2つの別々の関数呼び出しのためにランタイムコストが高くなる可能性があります)。私は、getAction()によって返された結合表現が、Android OSで内部的に使用されているものであると考えています。これは、このように2つの値を組み合わせると、モバイルハードウェア上でストレージとキャッシュの効率が向上します。最近のタッチイベントの履歴も保存されているため、これらのデータの多くは保存される可能性があります。 –

関連する問題