2011-10-11 4 views
5

Im書き込むのはOnTouchListenerです。しかし私は、MotionEvent.ACTION_MASKは、Android 1.5 /それはそこで行われたされた方法(APIレベル3) に存在していない私はAPIレベル3でMotionEvent.getAction()をフィルタリングする方法(ACTION_MASKはありません)

if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_MOVE) 

のようにビット演算を使用してACTIONTYPEを確認することができていることが分かりましたか?

答えて

4

ACTION_MASKは、実際のアクションとポインタの識別子(例えば、最初の指で触れたもの、2番目の指で触れたものなど)を区切るために使用されます。getAction()で返される値の最初の8ビットが実際のアクション部分です。 bitwise-AND action mask(= 11111111 = 255 = 0xff)とすると、アクションとポインタ情報は残っていません。

Android 1.5/APIレベル3では、私たちはMotionEventクラスで複数のポインタ(つまりマルチタッチ)をサポートしていませんでした。単一ポインタイベントの場合、ポインタビットは設定されません。そのため、単に特定のアクションのチェックを得ることが目的のアクション定数でイベントを比較することができます:

if ((event.getAction() == MotionEvent.ACTION_MOVE) {...} 

万一、これは動作しません、あなたがあることをあなた自身の行動のマスク定数を定義しようとすることができるということ255とそれ以降のAPIバージョンのようにアクションとビット単位でANDします。

MotionEvent(または実際のAndroid参照ページ)のdocsには、APIレベルでフィルタするチェックボックスがあります。 APIレベル3を選択すると、そのクラスの状態をその時点で確認できます。異なるポインタに関連するすべてのメソッドと定数はグレー表示されています。

+0

お時間をいただきありがとうございます。 Imはまだ考えていますが、この表現は新しいAndroidバージョンではfalseになるためです。これは3から今までのあらゆるデバイス/レベルで動作しますか?はいの場合は、プロジェクト作成時に入力したターゲット/ min_sdk情報のためですか? – unR

+1

式は、後のAPIレベルであっても、単一ポインタのタッチイベントに対して常に有効です。単一のポインタの場合、他の(ポインタ)ビットは設定されないので、マスクは必要ありません。 – antonyt

+0

ありがとうございます。受け入れられた – unR

関連する問題